在C ++中OR运算符的未知行为

时间:2018-04-27 04:31:07

标签: c++ logic

我有这个代码偶然运行,当我把任何东西作为答案时,它显示我是正确的。我知道我们必须在YES和yay之前放置ans,但是这个代码也被编译了,正如我提到的,如果我把任何单词作为输入输出是正确的:

string ans;
cin >> ans;

if(ans == "yes" || "YES" || "yay") {
    cout << "Correct";
}else {
    cout << "Incorrect";
}

3 个答案:

答案 0 :(得分:5)

好的,这里是逻辑运算符的优先级(L-> R)和关联性:

(((ans == "yes") || "YES") || "yay")

由于C / C ++与Python不同,所以没有链接

1st:ans == "yes" - &gt; strstr比较

第二名:bool result of 1st || "YES" - &gt; boolstr比较=始终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";
    }
}