for (int i=0; i<3;i++)
{
switch (i)
{
case 0: cout << "0"<<endl;
case 1: cout << "1"<<endl;
case 2: cout << "2"<<endl;
}
}
为什么打印0 1 2 1 2 2
?而不仅仅是0 1 2
。我使用gcc。运营商的情况下运营商
for (int i=0; i<3;i++)
{
switch (i)
{
case 0: cout << "0"<<endl;
case 1: cout << "1"<<endl;
case 2: cout << "2"<<endl;
}
}
为什么打印0 1 2 1 2 2
?而不仅仅是0 1 2
。我使用gcc。运营商的情况下运营商
在switch case块中,一旦满足case
,程序的控制将停止检查以查看彼此case
是否为真,并且将继续执行每个“动作”。例如:
int i = 1;
switch (i)
{
case 0:
cout << "0"; //action 1
case 1:
cout << "1"; //action 2
case 2:
cout << "2"; //action 3
}
//output is 12
因此,在您的for循环中,这也正在发生。要解决此问题(别人提到),使用break
声明在每个动作的结束,以防止编程控制“下降到”每一个动作:
int i = 2;
switch (i)
{
case 0:
cout << "0"; //action 1
break;
case 1:
cout << "1"; //action 2
break;
case 2:
cout << "2"; //action 3
break;
}
//output is 2
你想这样的:
for (int i=0; i<3;i++)
{
switch (i)
{
case 0: cout << "0"<<endl; break;
case 1: cout << "1"<<endl; break;
case 2: cout << "2"<<endl; break;
}
}
你有case x:
执行每一段代码后添加break;
像
switch (i)
{
case 0: cout << "0"<<endl; break;
case 1: cout << "1"<<endl; break;
case 2: cout << "2"<<endl; break;
}
所以,case
后的一段代码后,就进入到for
循环。
你的答案是A [参考上'之开关](http://en.cppreference.com/w/cpp/language/switch)。 – chris
在每种情况之后使用break语句。 –
什么阻止你阅读你的C++书? –