一道C++题中的疑惑

来源:百度知道 编辑:UC知道 时间:2024/05/18 00:01:06
#include<iostream.h>
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;
}
cout<<"a="<<a<<"b="<<b<<endl;
}
这题结果为a=2,b=1。为什么走了第一个case 1后还再走了遍case 2啊
我刚学C++,是个新手,请大家帮忙解决下。

case语句后如果没有跟"break;",程序就不会跳出该层,而会自上往下继续算下去,直到碰到该层的break为止。
case 1中包含的“break;”只是跳出了switch(y),因而继续走case 2。
如果不想让他走case 2,就改为
switch(x)
{case 1:
switch(y)
{case 0:a++;break;
case 1:b++;break;
} break;
case 2:......

switch(y)
{case 0:a++;break;
case 1:b++;break;
}
后面加个break;

你的代码里,
switch(x) 对应的case 1: 语句后面并没有break,所以将继续执行后面的case语句。

注意一下:
case 0:a++;break;
case 1:b++;break;
这两句的break,是针对switch(y) 的,switch(x)不受影响的