1.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;
}
输入5之后的运算结果:
2.break的作用
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;
}
输入5之后的运行结果:
3.多个case写到一起的情况
我们可以将多个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;
}
输入;
后的运行结果:
4.switch与if两种分支语句的比较
if
后可接任意表达式,但是switch后只能接整型表达式
(或者能转换为整型的表达式)switch
更简洁,同等复杂度的情况下,编译后的效率,switch
的效率一般不低于if
5.学习地址: switch分支语句