我有这个代码偶然运行,当我把任何东西作为答案时,它显示我是正确的。我知道我们必须在YES和yay之前放置ans,但是这个代码也被编译了,正如我提到的,如果我把任何单词作为输入输出是正确的:
string ans;
cin >> ans;
if(ans == "yes" || "YES" || "yay") {
cout << "Correct";
}else {
cout << "Incorrect";
}
答案 0 :(得分:5)
好的,这里是逻辑运算符的优先级(L-> R)和关联性:
(((ans == "yes") || "YES") || "yay")
由于C / C ++与Python不同,所以没有链接。
1st:ans == "yes"
- &gt; str
到str
比较
第二名:bool result of 1st || "YES"
- &gt; bool
和str
比较=始终true
"YES"
不为空
第3名:true || "YES"
=始终true
因此,true
的条件始终为"YES"
,"yay"
不为空。
答案 1 :(得分:3)
你的优先权是错误的。
if (var == A || B || C)
表示“if(var等于A)OR(B不为零)OR(C不为零)”
你想做if (var == A || var == B || var == C)
。这意味着“if(var等于A)OR(var等于B)或(var等于C)”
答案 2 :(得分:1)
您应该将ans与每个值进行比较。每次与值的比较都不是“0”或“失败”值被假定为“真”。因此,如果您输入if if(“yes”)这样的条件,它总是返回true。
int main()
{
std::string ans;
std::cin >> ans;
if("yes" == ans || "YES" == ans || "yay" == ans)
{
std::cout << "Correct\n";
}
else
{
std::cout << "Incorrect";
}
}