视频地址: https://www.bilibili.com/video/av73222096
switch分支语句的基本语法
switch(表达式)
{
case 常量1:
语句块1
break;
case 常量2:
语句块2
break;
...
case 常量n:
语句块n
break;
default:
默认语句块
}
switch后接的表达式的值,如果匹配之后的case常量,则跳转到对应的语句块并执行。如果全部case都不匹配,则跳转到default中的语句块执行。
简单例子:
#include <stdio.h>
int main(int argc, char* argv[])
{
int nValue = 0;
scanf("%d", &nValue);
switch (nValue)
{
case 0:
printf("case 0\r\n");
break;
case 5:
printf("case 5\r\n");
break;
case 7:
printf("case 7\r\n");
break;
case 8:
printf("case 8\r\n");
break;
case 10:
printf("case 10\r\n");
break;
default:
printf("没有case常量匹配,进入default流程\r\n");
break;
}
return 0;
}
break的作用
如果各个语句块最后没有break的话,则流程不会跳出switch,而是按顺序执行之后的语句。
int main(int argc, char* argv[])
{
int nValue = 0;
scanf("%d", &nValue);
switch (nValue)
{
case 0:
printf("case 0\r\n");
break;
case 5:
printf("case 5\r\n");
case 7:
printf("case 7\r\n");
case 8:
printf("case 8\r\n");
break;
case 10:
printf("case 10\r\n");
break;
default:
printf("没有case常量匹配,进入default流程\r\n");
break;
}
return 0;
}
甚至,我们可以将多个case写在一起,对应同一个语句块:
#include <stdio.h>
int main(int argc, char* argv[])
{
char chValue = 0;
scanf("%c", &chValue);
switch (chValue)
{
case ' ':case ',':case ';':
printf("空格、逗号、分号都算分隔符\r\n");
break;
default:
printf("没有case常量匹配,进入default流程\r\n");
break;
}
return 0;
}
switch与if两种分支语句的比较
- if后可接任意表达式,但是switch后只能接整型表达式(或者能转换为整型的表达式)
- switch更简洁
- 同等复杂度的情况下,编译后的效率,switch的效率一般不低于if