为什么这只是回归"是"

时间:2016-07-30 18:20:10

标签: c++ console-application

int OnLoad() {
cout << "Hi whats your name? ";
cin >> name;
system("cls");
cout << "Hi " << name << "." << " Are you here to Take Over the city from zombies?"<< endl;
cin >> userInput;
if (userInput == "yes" || "Yes") {
    cout << "Yes" << endl;
}
else if (userInput == "no" || "No") {
    cout << "No" << endl;
}
else {
    cout << "I don't understand." << endl;
}
return 0;
}

int main() {
OnLoad();
system("pause");
return 0;
}

这个代码只返回Yes,在控制台窗口弹出后询问你是否在这里从僵尸接管城市,即使我输入no后它返回yes!

2 个答案:

答案 0 :(得分:3)

if (userInput == "yes" || "Yes")

实际上意味着

if ((userInput == "yes") || ("Yes"))

两个表达式之间的逻辑OR:userInput == "yes""Yes"。第一个是正确的,直接评估为bool。第二个只是char*,将隐式转换为bool。由于它是编译时字符串,因此它不能是nullptr,这意味着它将始终评估为true。反过来,这意味着整个条件总是true(这是逻辑OR的工作原理)。 正确的代码是

if (userInput == "yes" || userInput == "Yes")

P上。 S.这就是为什么我总是建议使用可能的最高警告级别进行编译(/W4用于MSVC,-Wall -pedantic-errors用于GCC和clang)。在这种情况下,大多数编译器都会生成警告。

答案 1 :(得分:0)

那不是||运算符工作,如果您只是将“是”作为条件,它将始终评估为真

if (userInput == "yes" || userInput == "Yes") {
    cout << "Yes" << endl;
}

原因是因为优先

userInput == "yes"

userInput == "Yes"

在||之前得到评估(逻辑或)