繁体   English   中英

开关盒在嵌套时做

[英]switch case do while nesting

#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都在do内,而在case 0内.Twitch正在测试值1,所以case 0将永远不会被执行,因此情况1或2都没有。

n的值将是4.任何解释?

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

    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);

就像你的原始代码一样,这只是在label1puts )之前跳过循环体的一部分,然后继续,就像它以正常方式进入循环一样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM