所以这是我试图开始工作的代码,但它显示了"重复大小写值";每当它到达B我是一名大学一年级的学生,所以我可能使用了错误的格式,或者我可能忽略了一些我似乎真的不明白问题所在的东西,所以我向你们寻求的帮助
char dep;
int exp;
cout<<"please enter your department, A, B OR C: ";
cin>>dep;
cout<<"please enter your years of experience ";
cin>>exp;
switch(dep)
{
case 'A' || 'a' :{
switch (exp) {
case 5:
cout<<"you will recieve a 5% raise and 2.5% extra due to your experience";
break;
defualt : cout<<"you get 5% raise";
break;
}
}
break;
case 'B' || 'b' :{
switch (exp) {
case 5:
cout<<"you will recieve a 2% raise and 2.5% extra due to your experience";
break;
defualt : cout<<"you get 2% raise";
break;
}
}
break;
尽管它会编译(或者在没有B
版本的情况下会编译(,如果粗略地翻译成英语,它会拼写出你想要的内容,但case 'A' || 'a'
并没有做你认为它会做的事情。
case
之后的表达式被视为选择语句的精确匹配——它与dep
进行精确比较。你不能再加上一个更复杂的表达式,并期望它是";展开的";转换为多重比较。将switch
/case
视为一个简单的查找表,而不是一个智能分支功能(这就是if
的作用!(。
也许令人困惑的是,表达式'A' || 'a'
本身是有效的,但(像任何表达式一样(它的求值为单个值:true
或false
,这取决于其中一个操作数是否为"if";truthy";。在这个特定的例子中,两者都没有ASCII值零,所以两者都是真的,并且表达式总是true
。它将被转换为dep
的类型(规则说它变成1
(,并用于精确查找。
由于您也使用了'B'
和'b'
,因此您确实有两个等效的case
。
相反,为每个条件写一个单独的案例。幸运的是,由于case
失败了,您不需要重复";身体;对于这种情况:您可以将两个case
放在一起;只是不要在它们之间放一个break
:
case 'A':
case 'a':
// code here
break;
case 'B':
case 'b':
// code here
顺便说一下,你投错了default
。