1

在编译和运行下面的代码时,我们得到了所述的输出。请解释输出。case 2嵌套在其中,case 0因此程序根本不应该打印任何内容。

#include <stdio.h>

int main() {
    int i=5;
    switch ( 2 ) {
        case 0:
            for (  i=0; i<10; i++ ) {
        case 1:
            printf("A i=%d\n",i);
        case 2:
            printf("B i*i=%d\n",i*i);
            };
        case 3:
            printf("done");
            break;
    }

    return 0;
}

/* OUTPUT
B i*i=25
A i=6
B i*i=36
A i=7
B i*i=49
A i=8
B i*i=64
A i=9
B i*i=81
done
*/
4

2 回答 2

7

switch语句只是跳转到for循环中间(在case标签 2 处)。然后代码执行for循环。几乎相当于:

#include <stdio.h>

int main() {
    int i=5;

    goto label_2;

    for (  i=0; i<10; i++ ) {
        printf("A i=%d\n",i);
      label_2:
        printf("B i*i=%d\n",i*i);
    };

  label_3:
    printf("done");

    return 0;
}

这里的所有都是它的。

于 2013-06-13T07:33:25.037 回答
1
        for (  i=0; i<10; i++ ) {
    case 1:
        printf("A i=%d\n",i);
    case 2:
        printf("B i*i=%d\n",i*i);
        };

所以案例 2 在 for 循环内,因此输出中的重复。对于一个案例,您需要休息一下,否则它会在它切换到的案例之后执行每个案例。

switch(2)
case 1: //blah
case 2: //blah
case 3: //blah

对于上面的示例,情况 2 和 3 中的代码运行,而通常您编写:

switch(2)
case 1: //blah
    break;
case 2: //blah
    break;
case 3: //blah
    break;

在这种情况下,只运行案例 2

于 2013-06-13T07:34:56.813 回答