#include <iostream>
#include <string>
using namespace std;
int main()
{
string option;
cout << "Would like water, beer, or rum?--> ";
cin >> option;
while( option != "water" || option != "beer" || option != "rum" )
{
cout << "You did not choose a valid option. Try again.\n";
cout << "Would you like water, beer, or rum?-->";
cin >> option;
}
}
为什么即使用户输入正确的选项,此代码也不会退出循环?
答案 0 :(得分:11)
大声朗读您的情况 - “option
不是"water"
或 option
不是"beer"
时运行循环强> ...“。
什么时候应该停止?
答案 1 :(得分:3)
您使用的是错误的逻辑运算符。你想要所有你的条件是真的(option
不等于水,不等于啤酒,不等于朗姆酒),所以你应该使用和(&&
)。 或(||
)表示如果任何条件为真,则表达式为true,并且由于这些值是互斥的,因此总是如此因此你的无限循环。
答案 2 :(得分:2)
您的||
应为&&
,因为option
只能有一个值。
while (option != "water" && option != "beer" && option != "rum")
{
// ...
}
答案 3 :(得分:1)
这句话总是如此:
option != "water" || option != "beer" || option != "rum"
如果option
是“水”,那么它不是“啤酒”,所以陈述是真的。如果option
是“啤酒”,那么它不是“水”,所以声明是正确的(假设你当然喝了好啤酒。)
我认为你打算写
option != "water" && option != "beer" && option != "rum"
这样,只要option
接受任何这些值,循环就会退出。
希望这有帮助!
答案 4 :(得分:0)
几乎总是!= ||
序列是错误的&amp;&amp;应该使用。如果一个比较失败,其他比较都是真的,因此整个条件总是正确的。如果你不是一个人,你肯定与其他人不平等。
凭借经验,你会看到这样的结构。
答案 5 :(得分:0)
您可以使用容器存储有效选项,并检查选择是否在容器中:
set<string> validOptions = { "water", "beer", "rum"};
while(validOptions.count(option) == 0) {
// .. etc
}