C ++ while循环不起作用

时间:2013-06-20 18:34:42

标签: c++

#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;
        }
}

为什么即使用户输入正确的选项,此代码也不会退出循环?

6 个答案:

答案 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
}