簡體   English   中英

循環條件中邏輯運算符的使用

[英]Use of Logical Operator in Loop Condition

在下面給出的代碼中,為什么|| 邏輯不起作用,而是循環在使用&&時特別終止?

int main() {
    char select {};
    do {
        cout<<"Continue the loop or else quit ? (Y/Q): ";
        cin>>select;
    } while (select != 'q' && select != 'Q'); // <--- why || (or) doesn't work here ??
    return 0;
}

這個循環將繼續下去,而selectq 它不是Q

while (select != 'q' && select != 'Q'); 

select不是q它不是Q這個循環將繼續。

while (select != 'q' || select != 'Q'); 

既然其中之一必須是真的,它就會永遠持續下去。

例子:

  1. 用戶輸入q

select != 'q'計算結果為false
select != 'Q'評估為true
false || true false || true評估為true

  1. 用戶輸入Q

select != 'q'計算結果為true
select != 'Q'評估為false
true || false true || false評估為true

您希望在 select 等於'q''Q'時終止循環。

相反的條件可以寫成

do {
    cout<<"Continue the loop or else quit ? (Y/Q): ";
    cin>>select;
} while ( not ( select == 'q' || select == 'Q' ) );

如果打開括號,那么你會得到

do {
    cout<<"Continue the loop or else quit ? (Y/Q): ";
    cin>>select;
} while ( not( select == 'q' ) && not ( select == 'Q' ) );

這又相當於

do {
    cout<<"Continue the loop or else quit ? (Y/Q): ";
    cin>>select;
} while ( select != 'q' && select != 'Q' );

考慮以下圖表:

在此處輸入圖片說明

完整的橢圓都是字符。 白點分別是qQ 黑色填充區域描繪了使表達式true字符。 第一行是select != 'q' && select != 'Q' ,第二行是select != 'q' || select != 'Q' select != 'q' || select != 'Q'

&&表示兩個條件都必須為true 產生的黑色區域是左側兩個區域的重疊部分。

|| 意味着其中一個條件必須為true 產生的黑色區域是左側兩個區域的總和。

暫無
暫無

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

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