switch(表达式)
{
case 常量1:
语句块1
break;
case 常量2:
语句块2
break;
...
case 常量n:
语句块n
break;
default:
默认语句块
}
switch后接的表达式的值,如果匹配之后的case常量,则跳转到对应的语句块并执行。如果全部case都不匹配,则跳转到default中的语句块执行。
简单例子:
#includeint main(int argc, char* argv[]) { int nValue = 0; scanf("%d", &nValue); switch (nValue) { case 0: printf("case 0rn"); break; case 5: printf("case 5rn"); break; case 7: printf("case 7rn"); break; case 8: printf("case 8rn"); break; case 10: printf("case 10rn"); break; default: printf("没有case常量匹配,进入default流程rn"); break; } return 0; }
输入5之后的运算结果:
break用于跳出当前作用域即所在的{}。
如果各个语句块最后没有break的话,则流程不会跳出switch,而是按顺序执行之后的语句。
int main(int argc, char* argv[])
{
int nValue = 0;
scanf("%d", &nValue);
switch (nValue)
{
case 0:
printf("case 0rn");
break;
case 5:
printf("case 5rn");
case 7:
printf("case 7rn");
case 8:
printf("case 8rn");
break;
case 10:
printf("case 10rn");
break;
default:
printf("没有case常量匹配,进入default流程rn");
break;
}
return 0;
}
输入5之后的运行结果:
我们可以将多个case写在一起,对应同一个语句块:
#includeint main(int argc, char* argv[]) { char chValue = 0; scanf("%c", &chValue); switch (chValue) { case ' ':case ',':case ';': printf("空格、逗号、分号都算分隔符rn"); break; default: printf("没有case常量匹配,进入default流程rn"); break; } return 0; }
输入;后的运行结果:
if后可接任意表达式,但是switch后只能接整型表达式(或者能转换为整型的表达式)switch更简洁,同等复杂度的情况下,编译后的效率,switch的效率一般不低于if
5.学习地址: switch分支语句



