case 运算符 on for 运算符
case operator on for operator
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; 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
循环。
在一个switch case块中,一旦满足了一个case
,程序的控制就会停止检查对方case
是否为真,会继续执行每一个"action".例如:
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
语句以防止编程控制 "falling through" 每个操作:
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;
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; 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
循环。
在一个switch case块中,一旦满足了一个case
,程序的控制就会停止检查对方case
是否为真,会继续执行每一个"action".例如:
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
语句以防止编程控制 "falling through" 每个操作:
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