现在我正在查看一些c ++测试,在这里我找到了这样的代码:
int main()
{
for (int i=0; i<3; i++)
{
switch(i)
{
case 0: cout<<"ZERO";
case 1: cout<<"ONE"; continue;
case 2: cout<<"TWO"; break;
}
cout<<endl;
}
system("PAUSE");
return 0;
}
结果:
ZEROONEONETWO
我调试了,发现当i = 0时执行了案例0和案例1,为什么会发生?
答案 0 :(得分:3)
当您点击case 0:
时,它会落到case 1:
,因为没有任何声明可以阻止它break
或continue
。
答案 1 :(得分:1)
break语句
答案 2 :(得分:1)
switch
只是跳转到匹配的case
标签。完成后,将忽略更多case
个标签。另请注意,没有隐式break
- 如果将其遗漏,后续代码将按顺序执行。
所以,
for (int i=0; i<3; i++) // statements (1,2,3)
{
switch(i) // statement 4
{
case 0: cout<<"ZERO"; // statement 5
case 1: cout<<"ONE"; continue; // statements 6; 7
case 2: cout<<"TWO"; break; // statements 8; 9
}
cout<<endl; // statement 10
}
展开
i = 0; // statement 1
// begin first iteration with i=0
if (i<3) => true // statement 2
switch (i) => goto case 0 // statement 4
case 0: cout<<"ZERO" // statement 5
cout<<"ONE"; // statement 6
continue; // statement 7
=> jump to next iteration of loop
i++; // statement 3
if (i<3) => true // statement 2
// second iteration, i=1
switch (i) => goto case 1 // statement 4
case 1: cout<<"ONE"; // statement 6
continue; // statement 7
=> jump to next iteration of loop
i++; // statement 3
if (i<3) => true // statement 2
// second iteration, i=2
switch (i) => goto case 2 // statement 4
case 2: cout<<"TWO"; // statement 8
break; // statement 9
=> jump to end of switch
cout << endl; // statement 10
答案 3 :(得分:1)
你对switch语句的误解很常见,它源于这样一个事实,即switch语句通常被引入,就好像它们是更方便的if-then-else语句一样。
他们不是!
将它们想象成一连串的指令。其高度的度量单位是instruction
。
您可以决定高度,即第一个case
匹配与最后一个break
之间的指示。
:)
答案 4 :(得分:0)
你需要一个休息声明,否则你会得到“堕落”
答案 5 :(得分:0)
你忘记了休息声明
switch(i){
case 0:
{
//do something
break;
}
case 1:
{
//do something
break;
}
default:
{
//do something
break;
}
}
答案 6 :(得分:0)
因为每个案例都需要一个break语句。如果情况为true,则它将执行,直到找到break语句或switch strces结束。
您想要的代码
int main()
{
for (int i=0; i<3; i++)
{
switch(i)
{
case 0: cout<<"ZERO"; break;
case 1: cout<<"ONE"; continue;
case 2: cout<<"TWO"; break;
}
cout<<endl;
}
system("PAUSE");
return 0;
}