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