簡體   English   中英

如何在一個while循環中獲得多個條件?

[英]How do I get multiple conditions within one while loop?

我正在使用while循環,我想用戶輸入r,R,p或P.但是當我添加多個條件時:

while ((userInput != "r") || (userInput != "p" || (userInput != "R") || (userInput!= "P")) {
    cout << "Please enter a valid option" << endl;
    cin >> userInput;
}

我的程序將永遠停留在循環中。 好像我這樣輸入:

while (userInput != "r") {
    cout << "Please enter a valid option" << endl;
    cin >> userInput;
}

如果用戶輸入“r”,我的代碼將退出for循環那么為什么第一個代碼塊不起作用呢? 我沒有錯誤,這意味着它必須是一個邏輯錯誤,但我不明白。 如何在for循環中獲得更多條件並使其工作?

您需要使用&&而不是|| 因為使用|| 在條件while始終是true 例如,當您編寫“r”時,條件userinput != r為false但其余為真,其中&&所有表達式都變為falsewhile結束。

Why does the above condition not work?

原因是因為如果你說x is not 3 or x is not 5 ,那么如果x3 ,那么x不是5 ,所以整個語句的計算結果為true。 您的不同userInput != 'r'userInput != 'p'就像x情況一樣。

為了表明它更簡單,我將為or顯示一個真值表。 當表達式求值為true時,while循環將繼續低於這些情況,其中pq是可能為true或false的語句,如userInput != 'r'

||  -- or
 q\p|_T_|_F_|
 _T_|_T_|_T_|
 _F_|_T_|_F_|

意味着使用or子句,唯一的方法是假的,如果所有部分都是假的。

And條款似乎是你想要的。 它的真相表是:

&&  -- and
 q\p|_T_|_F_|
 _T_|_T_|_F_|
 _F_|_F_|_F_|

意思是,如果所有子句都是真的,那么使用and子句,唯一的方法是它是真的。

因此,如果您希望響應既不是r也不是p,R也不是R等,請使用&& for和:

while ((userInput != "r") && (userInput != "p") && (userInput != "R") && (userInput!= "P")) {

然后,只要userInputrpRP中的任何一個都不匹配,while循環就會退出。 這是因為在程序評估時,它會檢查:

以userInput為例“g”:

userInput g是否等於r 不,所以第一個條款是True。 userInput g是否等於p 不,所以第二個條款是真的。 userInput g是否等於R 不,所以第三個條款是真的。 userInput g是否等於P 不,所以第四個條款是真的。 因為所有四個都是真的,所以整個陳述是真的,而while循環繼續。

以userInput為“R”的示例:

userInput g是否等於R 不,所以第一個條款是True。 userInput g是否等於R 不,所以第二個條款是真的。 userInput g是否等於R 是。 所以第三個條款是假的。 由於語句的一部分為false,因此整個和子句為false,因此while循環退出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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