C++中逻辑或(OR)运算符的异常行为技术咨询
为什么你的C++代码无论输入什么都输出“Correct”?
嘿,这个问题太常见了,很多刚接触C++的开发者都会踩这个坑!我来给你掰扯清楚背后的原因~
先看你写的这段代码:
string ans; cin >> ans; if(ans == "yes" || "YES" || "yay") { cout << "Correct"; }else { cout << "Incorrect"; }
问题出在逻辑判断的写法上
你可能以为||是把几个判断条件连起来,检查ans是否等于其中任意一个字符串,但实际上C++里的逻辑或||要求两边都是布尔表达式。
当你写"YES"或者"yay"的时候,这些字符串字面量会被编译器当成const char*类型的指针。在布尔语境下,非空指针都会被评估为true——而这些字符串字面量肯定不是空指针,所以不管前面的ans == "yes"结果是啥,整个if条件都会变成true || true || true,自然永远执行cout << "Correct"那部分。
正确的写法应该是这样
你需要给每个字符串都加上完整的判断,确保每个||两边都是ans == 某个字符串的布尔表达式:
string ans; cin >> ans; if(ans == "yes" || ans == "YES" || ans == "yay") { cout << "Correct"; }else { cout << "Incorrect"; }
这样修改后,代码就会正确检查输入的ans是否等于这三个字符串中的任意一个,完全符合你的预期啦。
内容的提问来源于stack exchange,提问作者Shahryar
相关产品推荐
相关产品推荐

