In the below given code, why the || logical doesn't work, instead the loop terminates specifically when && is used ?
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;
}
                This loop will go on while select is not q and it's not Q:
while (select != 'q' && select != 'Q'); 
This loop will go on while select is not q or it's not Q.  
while (select != 'q' || select != 'Q'); 
Since one of them must be true, it'll go on forever.
Examples:
q
select != 'q' evaluates to falseselect != 'Q' evaluates to truefalse || true evaluates to true  
Q
select != 'q' evaluates to trueselect != 'Q' evaluates to falsetrue || false evaluates to true  
You want to terminate the loop when select is equal either to 'q' or 'Q'.
The opposite condition can be written like
do {
    cout<<"Continue the loop or else quit ? (Y/Q): ";
    cin>>select;
} while ( not ( select == 'q' || select == 'Q' ) );
If to open the parentheses then you will get
do {
    cout<<"Continue the loop or else quit ? (Y/Q): ";
    cin>>select;
} while ( not( select == 'q' ) && not ( select == 'Q' ) );
that in turn is equivalent to
do {
    cout<<"Continue the loop or else quit ? (Y/Q): ";
    cin>>select;
} while ( select != 'q' && select != 'Q' );
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With