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!
答案 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"
在||之前得到评估(逻辑或)