【问题标题】:case operator on for operatorcase 运算符 on for 运算符
【发布时间】:2015-05-26 19:57:03
【问题描述】:
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。

【问题讨论】:

  • 您的答案在reference on switch 中。
  • 在每个 case 之后使用一个 break 语句。
  • 是什么阻碍了您阅读 C++ 书籍?

标签: c++ for-loop switch-statement


【解决方案1】:

在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

【讨论】:

    【解决方案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;
      }
    }
    

    【讨论】:

      【解决方案3】:

      您必须在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 循环。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-04
        • 2016-06-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-26
        • 1970-01-01
        相关资源
        最近更新 更多