使用或切换语句

时间:2011-01-16 11:17:03

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

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

我知道switch语句用于比较常量,但是可以执行以下操作吗?

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

如果无法做到这一点,是否有解决方法?我真的不想重复代码。

7 个答案:

答案 0 :(得分:44)

这样:

 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

答案 1 :(得分:19)

普遍接受的语法是:

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

:由于缺少break,程序执行会进入下一个程序段。这通常被称为“堕落”。

那就是说,你当然可以通过toupper / tolower简化这个'menuChoice'变量的情况。

答案 2 :(得分:3)

只需使用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(),包括大写字母和非大写字母。

答案 3 :(得分:3)

在进入switch语句之前,你可以(并且出于可更新性的原因)在var上使用tolower fnc。

答案 4 :(得分:3)

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

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

答案 5 :(得分:2)

switch (toupper(choice))
{
  case 'Q':...
}

...或tolower。

答案 6 :(得分:0)

如果您这样做

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