switch语句如何在C中工作?

时间:2014-11-19 23:56:45

标签: c switch-statement

有人可以解释为什么当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;
}

4 个答案:

答案 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次这是一个烦人的错误,需要一个小时才能找到。