#include<stdio.h>
int main()
{
    int n=0, i=2;
    switch(1)
    {
    case 0:do
           {
    case 1: n++;
    case 2: n++;
           }while(--i > 0);
    }
    printf("n = %d",n);
}

我期望上述代码的输出为 0,因为案例 1 和案例 2 位于案例 0 内的 do while 内。开关正在测试值 1,因此案例 0 将永远不会执行,因此案例 1 或案例 2 都不会执行。

n 的值变为 4。有什么解释吗?

最佳答案

您的代码跳到循环的中间。从那时起,它会忽略 switch 语句的情况,因此它会执行 n++n++ 、检查条件、循环等。 如果您将 case 视为标签,将 switch 视为 goto ,则会有所帮助:

    int n=0, i=2;

    if (1 == 0)
        goto label0;
    else if (1 == 1)
        goto label1;
    else if (1 == 2)
        goto label2;

label0:
    do {
        puts("loop");
label1:
        n++;
label2:
        n++;
    } while (--i > 0);

与您的原始代码一样,这只是跳过了 label1 之前的循环体部分(puts ),然后继续像以正常方式进入循环一样。

关于c - 嵌套时切换案例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26387203/

10-11 21:12