虽然不等于陈述和/或差异

While not equal statement and or differences

本文关键字:不等于 陈述      更新时间:2023-10-16
while ((choice != "Wizard") && (choice != "Knight"))

这是唯一有效的

while ((choice != "Wizard") || (choice != "Knight"))
while (choice != "Wizard" || "Knight")

老实说,我不明白为什么使用 OR 不起作用,以及当我将它们分开时有什么区别。希望有人能帮忙解释。

取字符串"Wizard"

  • 它与"Wizard"有什么不同吗?不。
  • 它与 rom"Knight"有什么不同吗?是的。

所以"不同于巫师和不同于骑士"是错误的(它与"巫师"没有区别(。但是,"不同于巫师或不同于骑士"是正确的(它确实与"骑士"不同(。

至于第三种形式,choice != "Wizard" || "Knight"被解析为(choice != "Wizard") || "Knight"."Knight"是一个字符串文本,因此,它在大多数表达式中衰减为非空指针。由于不为空,指针将转换为true。所以你实际上是在问:"choice"Wizard"或真实不同。当然,这总是正确的。

作为不断增长的(choice != "...") &&链的替代方案,您可以创建一个要测试的事物的容器,并查看选择是否是该容器的一个元素。

static const std::unordered_set<std::string> options = {
"Wizard", 
"Knight", 
"Rogue", 
"Basket Weaver", 
};
while (options.count(choice) == 0)