案例'p'||的问题'P':C ++中switch语句中的语法

时间:2013-10-11 00:54:29

标签: c++ syntax compiler-errors switch-statement

我以下列方式使用了switch语句:

   switch (ch){
   case 'P' || 'p': 
        goto balance;
        break;

   case 'r' || 'R':
        goto menu;
        break;

   default:
           cout<<"\t\tInvalid Choice!!"<<endl;
           system ("\t\tpause");
           system ("cls");
           goto menu;
           break;
           }

但似乎以下语法出现了问题:

case 'r' || 'R'

编译器抱怨“重复案例值”。 我的代码出了什么问题?

3 个答案:

答案 0 :(得分:10)

将其更改为

case 'P':
case 'p': 
    goto balance;
    break;

使用goto通常不是一个好主意。


在原始代码中,case 'P' || 'p':相当于case 1,如果两个操作数均为零,则||的结果为0,否则为1。因此,在两个case语句中,'p' || 'P''r' || 'R'都评估为1,这就是您收到有关重复案例值的警告的原因。

答案 1 :(得分:8)

case 'P' || 'p': 
    ...

原意是:

case 'P':
case 'p':
    ...

请注意,您可以使用另一种方法(在这种情况下更合理):

switch ( std::tolower(ch) ) {
case 'p': 
     ...
     break;
case 'r':
     ...
     break; 

default:
     ...
}

你只需要#include <cctype>

答案 2 :(得分:3)

||是二元运算符; 'P' || 'p'评估为true,因为||的左操作数不为零。 'R' || 'r'也是如此。所以两个case语句都是case true:,这就是编译器所抱怨的。分开值:

case 'P':
case 'p':
    menu(); // function call recommended instead of `goto`
    break;