6.0.0 switch-case结构
6.1.0 什么是switch-case结构
switch-case结构被称为选择结构。
6.2.0 switch-case的语法结构
- 语法:
switch (表达式)
{
case 值1:
执行代码;
break;
case 值2:
执行代码;
break;
case 值3:
执行代码;
break;
default:
执行代码;
break;
}
注意:switch后的表达式没有说必须是一个条件表达式。
6.3.0 执行步骤
- 先计算switch后面的表达式的结果;
- 从上到下的将这个结果和每一个case后面的值进行相等比较判断;
- 如果有一个相等,那么就执行其中的代码,执行完毕之后,就结束整个switch结构;
- 如果不想等,那就再判断下一个case的值;
- 如果所有的case的值和表达式的结果都不相等,就执行default中的代码。
6.4.0 一些例子
- 语法例子:
int num = 10;
switch (num + num)
{
case 10:
printf(“AAA\n”);
break;
case 20:
printf(“BBB\n);
break;
case 30:
printf(“CCC\n);
break;
default:
printf(“over\n”);
break;
}
- 实际例子:
请用户输入一个星期数,输出对应的英文星期名称。1-7,否则显示“你是火星来的吗?”
int weekDay = 0;
printf(“请输入1-7之间的一个数,表示星期几:”);
scanf(“%d”,&weekDay);
switch (weekDay)
{
case 1:
printf(“Monday\n”);
break;
case 2:
printf(“Tuesday\n”);
break;
case 3:
print(“Wednesday\n”);
break;
.
.
.
default:
printf(“你是火星来的吗?\n”;
break;
}
6.5.0 注意事项
- switch后面的括号里可以写一个表达式、变量、常量;
- case穿透
每一个case块后面的break在语法上是可以不写的。
break的意思代表立即结束整个switch-case结构。
如果没有case块中没有写break,会穿透到下一个case块执行其中的代码,直到遇到有break的case块结束。如果没有break,则一直执行到所有case块结束。
所以在写代码时,一般情况下要注意不要漏掉break。
但是也有例外:例如用户输入一个月份,然后对应输出这个月份所属的季节。
int month = 0;
printf(“Please insert a month:”);
scanf(“%d”,&month);
switch (month)
{
case 1:
case 2:
case 3:
printf(“It’s Spring!\n”);
break;
case 4:
case 5:
case 6:
printf(“It’s Summer!\n”);
break;
以下类似并省略……
所以利用case穿透可以简写代码,利用的是多个case块的处理逻辑是一样的情况。
- switch后面的表达式的结果除了小数以外其他都是可以的。是小数就报错。
- case块可以加大括号,这样写没有任何影响。但是一般情况下不写大括号。
- 一个case块里可以写任意行代码,只要符合代码逻辑。但是要注意,如果要在case块中声明变量,则必须将这个case块内的代码用大括号括起来。
- case块可以有任意个,并且default可以省略掉,如果省略就没有默认执行代码了。
6.6.0 与if结构的关系和区别
- 能够使用switch-case结构写出来的代码一定可以用if结构写出来,但是反之则不行。
- switch-case结构只能做等值判断,不能直接做范围判断。并且case后面的数据不能有变量。但是if结构可以都可以做到。
- 使用建议:
如果是做等值判断,建议使用switch-case结构;如果是范围判断建议使用if结构。