[英]How do I get this output to appear on multiple conditions of the do while loop
[英]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但其余為真,其中&&
所有表達式都變為false
而while
結束。
Why does the above condition not work?
原因是因為如果你說x is not 3 or x is not 5
,那么如果x
是3
,那么x
不是5
,所以整個語句的計算結果為true。 您的不同userInput != 'r'
和userInput != 'p'
就像x
情況一樣。
為了表明它更簡單,我將為or
顯示一個真值表。 當表達式求值為true時,while循環將繼續低於這些情況,其中p
和q
是可能為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")) {
然后,只要userInput
與r
, p
, R
或P
中的任何一個都不匹配,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.