#include
void main()
{
int x = 1, y = 0, a = 0, b = 0;
switch (x)
{
case 1:switch (y)
{
case 0:a++; break;
case 1:b++; break;
}
case 2:a++; b++; break;
}
printf("a=%d,b=%d", a, b);
}
结果是2和1。这两个Switch,我类比if语句分析发现和结果不一样,感谢回答!
x=1 先入 switchx 的case 1, 即 switch y语句 ,y=0 执行 a++ 结束switch y, 因为x的case 1没有break, 执行case 2 就得到结果
运行结果:
a=2,b=1
2 分析:
#include <stdio.h>
void main( )
{ int x=1,y=0,a=0,b=0;
switch(x) //x=1,执行后面的case 1分支
{ case 1: //执行
switch(y) //y=0,执行后面的case 0分支
{ case 0: a++; break; //执行,a=1,跳到后面的case 2执行。
case 1: b++; break;
}
case 2: a++;b++; break; //执行。a=2,b=1。跳到后面的printf执行。
case 3: a++;b++;
}
printf("\na=%d,b=%d",a,b); //输出一行空行后,再输出a=2,b=1。
}
遇到break就直接跳出switch了和for循环不一样。
可能是 case 2 的上一行少个 break;
第一层switch跟x的值有关,x=1则此时进入case 1,case 1里面有另外一个switch 是跟y相关的,y=0,则进入case 0的位置,此时进行的操作是a++,a变成了1,然后跳出这个switch,由于第一层switch case 1的情况是没有break的,则程序继续进入case 2,此时进行a++,b++,则a变成了2,b变成了1
不知道你这个问题是否已经解决, 如果还没有解决的话: