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 false
select != 'Q'
evaluates to true
false || true
false || true
evaluates to true
Q
select != 'q'
evaluates to true
select != 'Q'
evaluates to false
true || false
true || 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' );
Consider the following diagrams:
The full ellipse are all characters. The white dots is q
and Q
respectively. The black filled area depicts characters that will make the expression true
. First line is select != 'q' && select != 'Q'
, second line is select != 'q' || select != 'Q'
select != 'q' || select != 'Q'
.
&&
means both conditions must be true
. The resulting black area is the overlap of the two areas on the left.
||
means either of the conditions must be true
. The resulting black area is the sum of the two areas on the left.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.