C++ 为什么这只是一种回归;是”; int OnLoad(){ 姓名; 系统(“cls”); 库特

C++ 为什么这只是一种回归;是”; int OnLoad(){ 姓名; 系统(“cls”); 库特,c++,console-application,C++,Console Application,实际上意味着 if (userInput == "yes" || "Yes") 它是两个表达式之间的逻辑OR:userInput==“yes”和“yes”。第一个是正确的,直接计算为bool。第二个是char*,将被隐式转换为bool。由于它是编译时字符串,所以不能是nullptr,这意味着它将始终计算为true。这反过来意味着整个条件总是为真(这就是逻辑OR的工作原理)。 正确的代码是 if ((userInput == "yes") || ("Yes")) 这就是为什么我总是建议使用尽可

实际上意味着

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

if ((userInput == "yes") || ("Yes"))
这就是为什么我总是建议使用尽可能高的警告级别进行编译(MSVC为
/W4
,GCC和clang为
-Wall-pedantic errors
)的原因。在这种情况下,大多数编译器都会生成警告

实际上意味着

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

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

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

这不是| |操作符的工作方式,如果你只是把“是”作为一个条件,它将始终计算为真

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


在| |(逻辑或)之前进行求值

这不是| |运算符的工作方式,如果您将“是”作为条件,它将始终求值为真

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


在| | |(逻辑OR)

| |
不做你想做的事。它实际上总是计算为真的!你想要
如果((userInput==“Yes”)| |(userInput==“Yes”)
我肯定有几百(如果不是几千)这个问题有很多重复的地方,所以我不会发布正式的答案。谢谢你,我实际上开始尝试这个,但我认为它是错误的。哈哈。
| |“是的”
没有做你想做的。它实际上总是计算为真的!你想要
如果((userInput==“Yes”)|(userInput==“Yes”)
我肯定有几百个(如果不是几千个的话)这个问题的副本,所以我不会发布一个正式的答案。谢谢你,我实际上开始尝试这个,但我认为它是错误的。哈哈。
userInput == "Yes"