4

我使用 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'

编译器抱怨“重复大小写值”。我的代码有什么问题?

4

3 回答 3

10

将其更改为

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

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


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

于 2013-10-11T00:57:35.880 回答
8
case 'P' || 'p': 
    ...

本来是:

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

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

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

default:
     ...
}

你只需要#include <cctype>

于 2013-10-11T00:56:38.000 回答
3

||是二元运算符;'P' || 'p'计算结果为true,因为 的左侧操作数||非零。同样的事情'R' || 'r'。所以这两个case语句都是case true:,这就是编译器所抱怨的。分隔值:

case 'P':
case 'p':
    menu(); // function call recommended instead of `goto`
    break;
于 2013-10-11T00:59:09.190 回答