这俩switch语句啥关系啊 为什么最后输出a=2,b=1

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

x==1,进switch(x)里的case1,y==0,执行switch (y)里面的case0:a++,这时a==1,然后break,退出switch (y),因为switch (x)的case1后面没有break,就会执行case2,a++,b++,最后a==2 b==1

第一层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

没问题啊,内switch语句a先自加,a==1,然后跳出来a再自加,b也自加,a==2,b==1

可能是 case 2的上一行少个 break;

两次a++,a从0变为2;
一次b++,b从0变为1。

第一个switchx为1执行case1,执行第二个switch,y为0,执行a++,在第一个switch里因为case1后面没加break所以接着执行case2,a和b在各加1,因此a为2,b为1

case 1:b++;break;这一句不执行

http://t.csdn.cn/uuCDO

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^