我以下列方式使用了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'
编译器抱怨“重复案例值”。 我的代码出了什么问题?
答案 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;