2013-06-20 128 views
2
#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; 
     } 
} 

为什么这个代码不会退出循环,即使用户输入正确的选项?C++虽然循环不工作

回答

2

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

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

@ user1816640没问题。 – 0x499602D2

3

您正在使用错误的逻辑运算符。你想所有你的条件为真(option不等于水,不等于啤酒,不等于朗姆酒),所以你应该使用&&)。 ||)表示如果条件为的任何为真,则表达式为真,并且由于这些值是互斥的,所以始终是这种情况,因此是无限循环。

11

了解你的病情大声 - “运行循环,而option不是"water"option不是"beer" ...”。

什么时候该停止?

1

这种说法始终是真实的:

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

如果option是“水”,那就不是“啤酒,”因此说法是正确的。如果option是“啤酒”,这不是“水”,所以说法是正确的(假设你有一个很好的啤酒,当然)。

我想你的意思是写

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

这样,只要option具有这些值中的任何一个,循环将退出。

希望这会有所帮助!

0

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

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

0

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

set<string> validOptions = { "water", "beer", "rum"}; 

while(validOptions.count(option) == 0) { 
    // .. etc 
}