在循环条件中使用逻辑运算符
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;
}
当 select
不是 q
并且 不是 Q
:
时,这个循环将继续
while (select != 'q' && select != 'Q');
当 select
不是 q
或 不是 Q
时,此循环将继续。
while (select != 'q' || select != 'Q');
因为其中之一必须为真,所以它会永远持续下去。
示例:
- 用户输入
q
select != 'q'
的计算结果为 false
select != 'Q'
的计算结果为 true
false || true
的计算结果为 true
- 用户输入
Q
select != 'q'
的计算结果为 true
select != 'Q'
的计算结果为 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' );
考虑以下图表:
全椭圆都是字符。白点分别是 q
和 Q
。黑色填充区域描绘了将构成表达式 true
的字符。第一行是 select != 'q' && select != 'Q'
,第二行是 select != 'q' || select != 'Q'
。
&&
表示两个条件都必须是true
。由此产生的黑色区域是左侧两个区域的重叠。
||
表示其中一个条件必须是true
。得到的黑色区域是左边两个区域的总和。
在下面给出的代码中,为什么 ||
逻辑不起作用,而是在使用 &&
时循环终止?
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;
}
当 select
不是 q
并且 不是 Q
:
while (select != 'q' && select != 'Q');
当 select
不是 q
或 不是 Q
时,此循环将继续。
while (select != 'q' || select != 'Q');
因为其中之一必须为真,所以它会永远持续下去。
示例:
- 用户输入
q
select != 'q'
的计算结果为 false
select != 'Q'
的计算结果为 true
false || true
的计算结果为 true
- 用户输入
Q
select != 'q'
的计算结果为 true
select != 'Q'
的计算结果为 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' );
考虑以下图表:
全椭圆都是字符。白点分别是 q
和 Q
。黑色填充区域描绘了将构成表达式 true
的字符。第一行是 select != 'q' && select != 'Q'
,第二行是 select != 'q' || select != 'Q'
。
&&
表示两个条件都必须是true
。由此产生的黑色区域是左侧两个区域的重叠。
||
表示其中一个条件必须是true
。得到的黑色区域是左边两个区域的总和。