突然想到一个问题,如果switch语句中,case的后面没有加break会怎么样呢?试试看,哈哈
/*可以猜想一下程序的运行结果。*/
#include "stdio.h"
int main()
{
char a = 0;
printf("不加break\n");
switch(a){
case 0:printf("1\n");
case 1:printf("2\n");
case 2:printf("3\n");break;
case 3:printf("4\n");
default :break;
}
printf("加入break\n");
switch(a){
case 0:printf("a\n");break;
case 1:printf("b\n");break;
case 2:printf("c\n");break;
case 3:printf("d\n");break;
default :break;
}
return 0;
}
结果如下:
不加break
1
2
3
加入break
a
分析结果我们可以发现:
a的值逐个和 case 后的常量表达式比较,若不等则继续往下比较,若一直不等,则执行 default 后的语句;若等于某一个常量表达式,则从这个表达式后的语句开始执行,并执行后面所有 case 后的语句。
switch 语句不会在执行判断为真后的语句之后跳出循环,而是继续执行后面所有 case 语句。在每一 case 语句之后增加 break 语句,使每一次执行之后均可跳出 switch 语句,从而避免输出不应有的结果。