Sag*_*ian 4 c nested switch-statement do-while
#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);
}
Run Code Online (Sandbox Code Playgroud)
我期望上面代码的输出为0,因为情况1和情况2都在do内,而在case 0中.Twitch正在测试值1,所以case 0将永远不会被执行,因此情况1或2都没有.
n的值将是4.任何解释?
您的代码跳转到循环的中间.从那时起,它忽略了switch语句的情况,所以它确实n++,n++检查条件,循环等.如果你认为a 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);
Run Code Online (Sandbox Code Playgroud)
就像你的原始代码一样,这只是在label1(the puts)之前跳过循环体的一部分,然后继续,就像它以正常方式进入循环一样.