关于C语言switch语句的break问题

main()
{
int fs;
scanf("%d",&fs);
switch(fs)
{
case 0 :printf("e");
case 1 :printf("e");break;
case 2 :printf("e");break;
case 3 :printf("e");break;
case 4 :printf("e");break;
case 5 :printf("e");break;
case 6 :printf("d");break;
case 7 :printf("d");break;
case 8 :printf("a");break;
case 9 :printf("aa");break;
case 10 :printf("s");break;
default:printf("cuo");

}
getch();
}
关于另类思考;上面把第一个的break去掉后为什么在输入0的时候会出现个ee?怎么会是两个e呢?详细说明下为什么会出现两个e
还是没有理解我的意思!输入0的时候会执行case0后的e,。但0并不等于1呀,怎么还会执行case1

c语言的switch语句是穿透的= = 也就是说当程序判断某个case的条件为真后,它将在执行该case所带的的语句块之后不再对后面的case的条件进行判断而直接执行。所以将第一个break去掉并输入0之后程序判断第一个case的条件为真,输出e,再继续执行第二个case后的语句,又输出e,之后遇到break语句退出switch结构。所以输出是两个e。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-08-06
case语句这样执行的:
先进入swtich,匹配找到第一个符合条件的case语句,执行完这条case语句后,继续往后执行,如果没有break,它就会继续完后执行,直到遇到break或者switch结束。
不信你试试,把所有的break都去掉,输入0,你会看到所有的都输出了!
所以在写case语句的时候要记住,每条case语句之后一定要加上break,否则后面的全部都会被执行。
第2个回答  2011-08-06
它执行了
case 0 :printf("e");
case 1 :printf("e");break;
这两句,所以会有两个e.
当程序从case 0:进入的时候,要遇到break才会跳出switch
第3个回答  2011-08-06
break;其作用大多情况下是终止上一层的循环
第一个case 0 打印一个e都没有跳出,
继续执行case 1 又打印一个e,
break就直接跳出。
所以打印ee
第4个回答  2011-08-06
如果一个case后面没有break,那么程序将顺次执行它下面的case,直到遇到break或switch语句的右大括号“}”为止。这样做提供了为几种情况设置共同的处理代码的便利。