【问题标题】:Switch statement using or使用 or 的 switch 语句
【发布时间】:2011-06-09 22:50:36
【问题描述】:

我正在创建一个控制台应用程序并使用switch 语句创建一个简单的菜单系统。用户输入采用单个字符的形式,在屏幕上显示为大写字母。但是,我确实希望程序同时接受小写和大写字符。

我了解switch 语句用于与常量进行比较,但是否可以执行以下操作?

switch(menuChoice) {
    case ('q' || 'Q'):
        //Some code
        break;
    case ('s' || 'S'):
        //More code
        break;
    default:
        break;
}

如果这不可能,是否有解决方法?我真的不想重复代码。

【问题讨论】:

    标签: c++ switch-statement conditional-statements or-operator


    【解决方案1】:

    这样:

     switch(menuChoice) {
        case 'q':
        case 'Q':
            //Some code
            break;
        case 's':
        case 'S':
            //More code
            break;
        default:
     }
    

    关于该主题的更多信息: http://en.wikipedia.org/wiki/Switch_statement#C.2C_C.2B.2B.2C_Java.2C_PHP.2C_ActionScript.2C_JavaScript

    【讨论】:

      【解决方案2】:

      普遍接受的语法是:

      switch(menuChoice) {
          case 'q':
          case 'Q':
              //Some code
              break;
          case 's':
          case 'S':
              //More code
              break;
          default:
              break;
      }
      

      即:由于缺少break,程序执行级联到下一个块。这通常被称为“失败”。

      也就是说,您当然可以通过 toupper/tolower 简单地将本实例中的“menuChoice”变量的大小写标准化。

      【讨论】:

      • 我认为这应该是最好的答案,而不是上面的答案 - 它不仅回答了如何解决它,而且还告诉你为什么在你必须去一个可能存在或可能不存在的链接之前。
      【解决方案3】:

      'q' || 'Q' 导致 bool 类型结果 (true) 提升为用于开关条件的整数类型 (char) - 给出值 1。如果编译器允许在多个标签中使用相同的值 (1),则在执行 switch 语句期间,menuChoice 将在每种情况下与值​​ 1 进行比较。如果menuChoice 的值为1,那么第一个case 标签下的代码将被执行。

      因此,此处建议的答案使用字符常量(类型为 char)作为每个案例标签中的整数值。

      【讨论】:

        【解决方案4】:

        只需使用tolower(),这是我的男人:

        概要
        #include ctype.h

           int toupper(int c);
           int tolower(int c);
        

        描述 toupper() 将字母 c 转换为大写,如果可能的话。

           tolower() converts the letter c to lower case, if possible.
        
           If c is not an unsigned char value, or EOF, the behavior of these
           functions is undefined.
        

        返回值 返回的值是转换后的字母的值,或者 c 如果 无法转换。

        因此,在您的示例中,您可以 switch() 使用:

        switch(tolower(menuChoice)) {
            case('q'):
                // ...
                break;
            case('s'):
                // ...
                break;
        }
        

        当然,您可以同时使用toupper()tolower(),包括大写和非大写字母。

        【讨论】:

          【解决方案5】:

          在输入 switch 语句之前,您可以(并且出于可重复性的原因,应该)在您的 var 上使用 tolower fnc。

          【讨论】:

            【解决方案6】:
            switch (toupper(choice))
            {
              case 'Q':...
            }
            

            ...或更低。

            【讨论】:

            • 根据 B.S. 的说法,您应该(出于便携性原因)使用 tolower
            【解决方案7】:

            如果你这样做了

            case('s' || 'S'):
                // some code
            default:
                // some code
            

            sS 都将被忽略,并且在您输入这些字符时将运行默认代码。所以你可以决定使用

            case 's':
            case 'S':
                // some code
            

            switch(toupper(choice){
                case 'S':
                    // some code.
            

            toupper 需要您添加 ctype.h

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-01-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多