为什么这个switch语句给出11作为输出?

时间:2015-11-25 17:38:55

标签: c

我帮助在大学教授计算机科学课程的介绍,我帮助的教授在学生面前给我测试,以确保我不认为这些问题太难或太混乱。他用以下代码给我一个问题:

#include<stdio.h>
#include<stdlib.h>

int main(){
  int x = 5;

  switch(x){
    case 3: x += 1;
    case 4: x += 2;
    case 5: x += 3;
    case 6: x++;
    case 7: x += 2;
    case 8: x--;
    case 9: x++;
  }
}

现在当我运行它时,我认为输出应该是10.但是,当运行时,它输出11.我在每个案例之后放置print语句,输出看起来像这样:

8
9
11
10
11
11

所以我的问题是,有人可以解释一下吗?我觉得这是一件简单的事情,但我无法理解我的生活。

2 个答案:

答案 0 :(得分:7)

switchcase 5开始,直至结束时(因为缺少break - 关键字)。所以:5 + 3 + 1 + 2 - 1 + 1 = 11

答案 1 :(得分:2)

在C编程语言中,并非每个案例都包含一个中断。如果没有出现中断,则控制流将逐渐落到案例中,直到达到中断为止。

因此,如果x开始为5

case 5: x += 3;  //5+3 = 8
case 6: x++;     //8+1 = 9
case 7: x += 2;  //9+2 = 11
case 8: x--;    //11-1 = 10
case 9: x++;    //10+1 = 11

结果是11。