有人可以解释为什么当x = 0时,此代码的输出为4(我认为如果x为0,则应用case 0:
并且y假设为3,在这种情况下我错了
#include <stdio.h>
int main()
{
int x = 0;
int y;
switch (x) {
case 0:
y = 3;
case 1:
y = 4;
break;
default:
y = 5;
break;
}
printf("%d", y);
getchar();
return 0;
}
答案 0 :(得分:3)
在switch(x)
操作之后,执行首先跳转到相应的case N
语句。然后它在该语句之后执行代码,直到a)它找到由括号(switch(x)
)定义的{}
边界的末尾或b)它在交换机内找到break
语句,其结束切换。
在您的情况下,它经历y=3
向下case 1
,向下到y=4
,然后在break
结束。
答案 1 :(得分:2)
您在第一个案例陈述中注释了break;
陈述!
所以写下这个:
(否则,当x为0或1 y分配给3然后4时)
case 0:
y = 3;
break;
switch
语句会转到下一个break;
,如果case
语句中缺少一个switch
语句!如果你忘记了所有这些:D然后它在{{1}}语句结束时停止并且所有行都被执行了!
答案 2 :(得分:2)
Case语句被设计为直接进入下一个案例,除非它们有一个break语句来将执行从整个开关中拉出来。在这种情况下,你推荐了“案例0”的break语句,因此执行下滑到“案例1”,将y重新分配给4。
答案 3 :(得分:1)
因为break
被注释掉了:
switch (x) {
case 0:
y = 3;
//break; <---- commented out.
对于每个新手来说,惊喜执行都只是来自“匹配”。除非遇到休息(或返回)。
我确信它在当时似乎是一个好主意,并且有一些真正结果的编码技巧可以利用它。 达夫的装置是最着名的。
http://en.wikipedia.org/wiki/Duff's_device
1000次中有999次这是一个烦人的错误,需要一个小时才能找到。