[英]Confusion with the OR logical Operator in a Loop
早在IRC頻道上,有人問了有關他的代碼的問題-本質上說,他的程序在無限循環中運行:
#include <iostream>
using namespace std;
int main()
{
cout << "This program adds one to your input." << endl;
char choice = 'n';
int num = 0;
while (choice != 'y' || choice != 'Y')
{
cout << "Enter number: ";
cin >> num;
num++;
cout << "Your number plus 1 is: " << num << endl;
cout << endl << "Continue/Quit? Type 'Y' to quit, any other key to continue: ";
cin >> choice;
}
cout << "By choosing 'Y', you exit the loop." << endl;
return 0;
}
注意循環頭,看起來循環應該工作得很好,但是每當我需要輸入Y或y退出時,循環就會繼續運行。 考慮到如果左側的表達式為true,則while循環不會評估右側的表達式,因此這尤其令人困惑。 但是無論如何,即使我輸入Y或y,循環也會繼續運行! 我想對發生這種情況的原因進行更深入的解釋,我一直試圖將其解釋出來,回頭看課本等。但是我似乎不明白為什么...我改變了OR進入“與”門,但是什么使“或”門如此糟糕並導致其故障呢?
謝謝大家
條件(choice != 'y' || choice != 'Y')
始終為true,因此循環將不確定地運行。 如果選擇=='y',則得到(false || true)== true; 如果選擇=='Y',則得到(true || false)== true。 您需要使用while(choice != 'y' && choice != 'Y')
來代替,在這種情況下,僅當您獲得'y'或'Y'時才退出循環,否則獲得(true && true)並繼續。
如果至少一條語句為true,則許多語句之間的OR
運算符將返回true,無論其他語句為false還是true。 在您的情況下, choice != 'y' || choice != 'Y'
choice != 'y' || choice != 'Y'
將像這樣評估:
第一句話是正確的:執行while循環。
第一條陳述為假:檢查第二條陳述是否為真。
第二句話是正確的:執行while循環。
第二句話是錯誤的:不要在while循環中執行。
具體來說,當編譯器到達choice != 'y'
,如果choice == 'Y'
,則編譯器仍將執行,因為choice != 'y'
為true,實際上選擇等於Y
,因此與y
。
另一方面,如果choice等於y
,則它將檢查第二條語句是否為true,但我們知道choice等於y
,所以choice
不同於Y
,依此類推...
您輸入有誤,請更改“ ||” 至 ”&&”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.