2017-11-25 292 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");