请解释以下C程序中的嵌套switch-case语句和相应的输出

时间:2013-06-13 07:29:36

标签: c

在编译并运行下面的代码时,我们得到了所述的输出。请解释输出。 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
*/

2 个答案:

答案 0 :(得分: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;
}

这就是它的全部内容。

答案 1 :(得分: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