【问题标题】:switch instruction nested in for loop is not working [closed]嵌套在 for 循环中的 switch 指令不起作用[关闭]
【发布时间】:2017-05-02 16:25:54
【问题描述】:

我是一名 C++ 自学者,我正在经历这种奇怪的行为。

#include <iostream>
using namespace std;
int main () {
    for (int i=0;i<3;i++) {
        switch(i) {
            case '0' : // do something
                cout << "A" << endl;
            case '1' : // do something else
                cout << "B" << endl;
            // no default set
        }
    }
    return 0;
}

有了这个 MWE,为什么不执行 switch 语句?在我的机器上,使用 g++ 和 cmake 编译,我看到控制台中没有打印任何字符。

感谢您的帮助!

【问题讨论】:

  • 将问题简化为简单检查0 == '0' 会发现问题。请在与我们联系之前解构您的问题;这是调试任务的一部分。
  • 你说得对,我一直很不明智,但我还在自学中,以前从未见过这样的控制程序。感谢您的输入
  • 更有理由解构它

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


【解决方案1】:

您的 switch 语句正在打开字符代码 '0''1' 等,而它应该打开 数字 01 等。

此外,您需要在每个部分的末尾添加 break 语句,否则每个 case 将流入下一个部分。

switch(i) {
    case 0 : // do something
        cout << "A" << endl;
        break;
    case 1 : // do something else
        cout << "B" << endl;
        break;
    // no default set
}

【讨论】:

  • 正如我之前发布的,我一直很不明智。感谢您的回答,当然就像一个魅力
【解决方案2】:

您正在检查i 是否等于'0',后者等于48。 而是检查它是否等于0

switch(i) {
            case 0 : // do something
                cout << "A" << endl;
            case 1 : // do something else
                cout << "B" << endl;
            // no default set
        }

另请注意,如果您的 case 块中没有 break 语句,它将继续执行下一个案例。

【讨论】:

    【解决方案3】:

    您正在将映射字符与整数混合... char '0' 和 int 0 的值不同。

    0 是 ascii 30 但 '0' 是 48

    使用默认情况可以帮助您找到原因

    【讨论】:

      【解决方案4】:

      我怀疑您的意思是 case 0:case 1: 而不是 case '0': 等。差异很微妙,但会导致您的开关从不打印任何东西。 '0' 的值是字符 '0' 而不是数字 0 的底层整数表示。

      【讨论】:

        【解决方案5】:

        案例标签的值需要与您使用的类型相匹配。你有

        case '0' : // do something
            cout << "A" << endl;
        case '1' : // do something else
            cout << "B" << endl;
        

        这意味着i 需要等于字符文字'0''1'。你需要的是实际的整数,比如

        case 0 : // do something
            cout << "A" << endl;
        case 1 : // do something else
            cout << "B" << endl;
        

        还请注意,当i1 时,cout &lt;&lt; "A" &lt;&lt; endl;cout &lt;&lt; "B" &lt;&lt; endl; 将在没有中断语句的情况下执行。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-19
          • 1970-01-01
          • 2018-12-03
          • 1970-01-01
          相关资源
          最近更新 更多