簡體   English   中英

循環中與OR邏輯運算符的混淆

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM