1.switch语句中的break
除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。 switch 语句是⼀种特殊形式的 if...else 结构,⽤于判断条件有多个结果的情况。它把多重 的 else if 改成更易⽤、可读性更好的形式。
练:输⼊任意⼀个整数值,计算除3之后的余数
#include<stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch (n % 3)
{
case 0:
printf("整除,余数为0\n");
case 1:
printf("余数是1\n");
case 2:
printf("余数是2\n");
}
return 0;
}
我们会发现输入一个8看看,似乎一切正常
但是我们再试试输入1、2、3就能发现其中的猫腻了
我们发现,1除以3本来余数是1,但是我们发现程序运⾏的结果多了⼀⾏“余数是2”的打印,后两种情况同理,这是为何?
原来switch语句也是有分⽀效果的,我们是从switch(n % 3 )其中(n % 3 )的结果是几,而决定我们从case几进去(决定入口)。因此,如果我们不会停下来的话 如同我从case 0 进去不停下,然后case 1,case 2 我也会进去,因此就成为了这个情况(如下图)
同理,如果我从case 1进入,那么case 2也会被我进入,当你输入的数字刚好只进入case 2时,这就成为了偶然性,如最开始输入的8,因此导致我们误以为代码正常。
只有在 switch 语句中使⽤ break 才能在跳出 switch 语句,如果某⼀个 case 语句的后边没有 break 语句,代码会继续往下执⾏,有可能执⾏其他 case 语句中的代码,直到遇到 break 语句或者 switch 语句结束。
就像这样:
#include<stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch (n % 3)
{
case 0:
printf("余数为0\n");
break;
case 1:
printf("余数是1\n");
break;
case 2:
printf("余数是2\n");
break;
}
return 0;
}
这时候我们输入1 、2、3看看
问题解决,所以在 switch 语句中 break 语句是⾮常重要的,能实现真正的分⽀效果。 当然, break 也不是每个 case 语句都必须有,这就得根据实际问题来看了。
注:(1)case 和后边的数字之间必须有空格。
(2)每⼀个 case 语句中的代码执⾏完成后,需要加上 break ,才能跳出这个switch语句。
(3)switch语句也有分⽀效果。
2.switch语句中的default
在使⽤ switch 语句的时候,我们经常可能遇到⼀种情况,⽐如 switch 后的表达式中的值⽆法匹 配代码中的 case 语句的时候,这时候要不就不做处理,要不就得在 switch 语句中加⼊ default ⼦句。
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch (n)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("周末\n");
break;
default:
printf("输⼊错误\n");
break;
}
return 0;
}
在上一段代码中可见用户的输入范围只能在1~7之间,如果我们不加入default子语句则什么也不会输出,但我们加入之后会出现什么情况呢?比如说我们输入一个数字8看看。
这时显示输入错误,且不会影响到1~7数字的正常运行。
2.1 switch语句中的case和default的顺序问题
在 switch 语句中 case ⼦句和 default ⼦句有要求顺序吗? default 只能放在最后吗? 其实,在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满⾜实际需求的就行,不过我们通常是将要 default ⼦句放在最后处理的。