【问题标题】:How do you have logical or in case part of switch statment?您如何拥有 switch 语句的逻辑或 case 部分?
【发布时间】:2012-08-16 21:17:18
【问题描述】:

如果你有一个 switch 语句,并且希望在值是一个值时运行某些代码另一个值你怎么做?以下代码始终使用默认情况。

#include <iostream>
using namespace std;

int main()
{
    int x = 5;
    switch(x)
    {
        case 5 || 2:
            cout << "here I am" << endl;
            break;
        default:
            cout << "no go" << endl;
    }

    return 0;
}

【问题讨论】:

    标签: c++ switch-statement logical-operators


    【解决方案1】:

    像这样:

    switch (x)
    {
    case 5:
    case 2:
        cout << "here I am" << endl;
        break;
    }
    

    被称为“跌倒”。

    只是指出在发布的代码中执行default案例的原因是5 || 2的结果是1true)。如果您在发布的代码中将x 设置为1,则会执行5 || 2 案例(请参阅http://ideone.com/zOI8Z)。

    【讨论】:

    • @Celeritas,我从未说过它的计算结果为 2,它是逻辑 OR。
    • 对不起,我的意思是 5 || 2 计算结果为 1。但在二进制 101 OR 11 = 111 中是 7,而不是 1。对吗?
    • @Celeritas,它是逻辑 OR,而不是按位。查看我的答案中的链接。
    【解决方案2】:

    让它失败:

    int main()
    {
        int x = 5;
        switch(x)
        {
            case 5:
            // there's no break statement here,
            // so we fall through to 2
            case 2:
                cout << "here I am" << endl;
                break;
            default:
                cout << "no go" << endl;
        }
    
        return 0;
    }
    

    5 || 2,顺便说一下,计算结果为1(或true,因为它是一个逻辑表达式),你可以试试。

    【讨论】:

      【解决方案3】:

      switch 通过

      switch(x)
      {
          case 2:
          case 5:
              cout << "here I am" << endl;
              break;
          default:
              cout << "no go" << endl;
      }
      

      【讨论】:

        【解决方案4】:
        case2:
        case5:
           //do things
           break;
        

        【讨论】:

          【解决方案5】:

          Here is a really good read 关于 switch/case 及其在 C/C++ 之间的细微差别以及您可能想知道的有关标签 (ABCD:) 的其他一些信息。

          【讨论】:

            猜你喜欢
            • 2013-02-25
            • 2013-05-08
            • 1970-01-01
            • 1970-01-01
            • 2012-12-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多