在循环条件下使用逻辑运算符

时间:2019-12-10 19:41:46

标签: c++ loops while-loop do-while logical-operators

在下面给出的代码中,为什么||逻辑不起作用,而是专门在使用&&时循环终止?

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;
}

3 个答案:

答案 0 :(得分:4)

select不是q 并且不是Q时,此循环将继续:

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

select不是q 不是Q时,此循环将继续。

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

由于其中之一必须为真,因此它将永远持续下去。

示例:

  1. 用户输入q

select != 'q'的值为false
select != 'Q'的值为true
false || true计算为true

  1. 用户输入Q

select != 'q'的值为true
select != 'Q'的值为false
true || false计算为true

答案 1 :(得分:2)

当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' );

答案 2 :(得分:2)

请考虑以下图表:

enter image description here

完整的椭圆都是字符。白点分别为qQ。黑色填充区域表示将构成表达式true的字符。第一行是select != 'q' && select != 'Q',第二行是select != 'q' || select != 'Q'

&&表示两个条件都必须为true。产生的黑色区域是左侧两个区域的重叠。

||表示其中任何一个条件必须为true。产生的黑色区域是左侧两个区域的总和。