c++ while循环不工作

C++ while loop not working

本文关键字:工作 循环 while c++      更新时间:2023-10-16
#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;
        }
}

为什么即使用户输入了正确的选项,这段代码也没有退出循环?

大声读出条件- "当option不是"water" option不是"beer" 时运行循环"。

什么时候应该停止?

您使用了错误的逻辑运算符。您希望所有条件都为真(option不等于水,不等于啤酒,也不等于朗姆酒),因此您应该使用 (&&)。 (||)表示如果任何条件为真,则表达式为真,并且由于值是互斥的,因此总是如此,因此是无限循环。

这个语句总是为真:

option != "water" || option != "beer" || option != "rum"

如果option是"水",那么它不是"啤酒",所以这个陈述是正确的。如果option是"啤酒",那么它不是"水",因此该语句为真(当然,假设您喝的是好啤酒)

我想你是想写

option != "water" && option != "beer" && option != "rum"

这样,只要option取了这些值中的任何一个,循环就会退出。

希望这对你有帮助!

您的|| s应该是&& s,因为option只能有一个值。

while (option != "water" && option != "beer" && option != "rum")
{
   // ...
}

几乎总是!= ||序列是错误的&&应该使用。如果一个比较失败,其他比较为真,因此整个条件总是为真。如果你不比一个人差,那你肯定不比别人差。

有了经验,你会渴望看到这样的结构。

您可以使用容器来存储有效的选项,并检查所选内容是否在容器中:

set<string> validOptions = { "water", "beer", "rum"};
while(validOptions.count(option) == 0) {
    // .. etc
}