2017-11-25 234 views
-10

伙计! 我正在用C++编写一个程序来演示'do-while'循环。只要不是“再见”,该程序只会回应用户输入的任何内容。 因此,如果用户输入'嘿',程序会回应'嘿',如果用户输入'再见',程序将停止。这是代码:C++ do-while循环

#include "stdafx.h" 
#include <iostream> 
#include <string> 

using namespace std; 

int main() 
{ 
string wordString; 

do 
{ 
    cout << "\nEnter a word: "; 
    getline(cin, wordString); 
    cout << "\nYou entered: " << wordString<<"\n"; 
} while ((wordString!="goodbye")||(wordString!="Goodbye")); 

return 0; 
} 

我想要做的是使程序停止当用户输入单词“再见”或“再见。”所以我加了||检查,但它不起作用,循环语句只是继续执行。 但是当我把& &而不是||它工作正常,只要输入“再见”或“再见”,程序就会停止。

所以我的问题是这样的:为什么& &工作和||不?

+3

在一张纸上分配到'wordString'不同的值,看看有什么每个条件评估为。这是否真的需要关于SO的完整问题? – StoryTeller

+0

只需申请[德摩根法律](https://en.wikipedia.org/wiki/De_Morgan%27s_laws),你就会明白为什么。 – Jodocus

+0

逻辑;这个时间总是等于1。使用AND时,当任一条件为0时,该时间将为0. – JDQ

回答

0

使用|| deosnot停止程序,因为它是或运算符,这意味着它将是真实的,当任何人的声明是真实的,所以如果任何人是真的,那么它将执行另一方面在AND(& &)operator这意味着两个声明必须是真实的才能执行。

0

你必须使用logical and &&or ||因为你想打破循环,如果只wordstring不等于RO“再见”,不等于“再见”:

while(wordString != "goodbye") && (wordString != "Goodbye"); 

或者您可以使用OR ||这样:

while(wordString == "goodbye" || wordString == "Goodbye"); 

正如你可以看到,或者如果wordString包含无论是“再见”或“再见”,然后打破。如果两个操作数均为非零,则逻辑或返回true,如果两者均为零,则返回false。逻辑AND“& &”只返回true,如果两个操作数非零,则返回flase(0)。

我可以看到,如果用户输入“再见”;资本中的第一个字母或小写字母和大写字母的混合,那么你将编程将看起来很荒谬;因为它不会中断。

的解决方法是,你可以输入文本转换为要么全部大写或小写字母,然后仅选中一个值:

std::string wordString = "GoodBye"; 
for(int i(0); i < wordString.length(); i++) 
    wordString[i] = to_upper(wordString[i]); 

// wordString = "GOODBYE" 

// .... 
while(wordString != "GOODBYE");