switch...case语句嵌套问题

来源:百度知道 编辑:UC知道 时间:2024/05/26 04:29:10
main()
{int x,y,a=0,b=0;
scanf("%d%d",&x,&y);
switch(x)
{case 1:
switch(y)
{case 0:a++;break;
case 1:b++;break;
}
case 2:a++;b++;break;
case 3:a++;b++;
}
printf("a=%d,b=%d",a,b);
}
_______________________________________________________
运行后
假如输入 1 0
结果是 a=2,b=1

但自己算感觉结果应该是a=1,b=0
求高人详细讲解

输入 1 0
先运行:
case 1:
switch(y)
{case 0:a++;break;
case 1:b++;break;
}
因为y=0,所以运行:case 0:a++;break;
因为
case 1:
switch(y)
{case 0:a++;break;
case 1:b++;break;
}
没有break;所以继续运行
case 2:a++;b++;break;
在这里break掉了,所以最后的执行有 a++ a++ b++;

要想得到:
a=1,b=0
改成这样:
case 1:
switch(y)
{case 0:a++;break;
case 1:b++;break;
}
break;
case 2:a++;b++;break;
case 3:a++;b++;

break跳出的是嵌套里面的那个switch,
跳出后a=1;
顺序执行了语句: 这里没有判断switch(x)没有作用
case 2:a++;b++;break;跳出循环
可以用下面的测试

int x,y,a=0,b=0;
cin>>x>>y;
switch(x)
{case 1:
switch(y)
{case 0:a++;break;
case 1:b++;break;
}
case 2:a++;b++;
cout<<a<<b;
break;
case 3:a++;b++;
}
cout<<a<<b;

#include <stdio.h>
void main()
{
int x,y,a=0,b=0;