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

Problems with case 'p' || 'P': syntax within a switch statement in C++

本文关键字:switch 语句 语法 C++ 问题 案例      更新时间:2023-10-16

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

   switch (ch){
   case 'P' || 'p': 
        goto balance;
        break;
   case 'r' || 'R':
        goto menu;
        break;
   default:
           cout<<"ttInvalid Choice!!"<<endl;
           system ("ttpause");
           system ("cls");
           goto menu;
           break;
           }

但以下语法似乎有问题:

case 'r' || 'R'

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

将其更改为

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

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


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

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

本意是:

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

请注意,您可以使用另一种(在本例中更合理(方法:

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

你只需要#include <cctype>

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

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