为什么此代码仅适用于&&
操作员?
我认为应该是||
,但我错了。Choice
不能同时等于2个值吗?
我需要询问用户的输入,直到选择等于'a'
OR 'd'
,但为什么我需要写&&
?我不明白。
do
{
scanf("%c", &choice);
} while ( choice != 'a' && choice != 'd' );
我想使用||
,但它不起作用。
为什么此代码仅适用于&&
操作员?
我认为应该是||
,但我错了。Choice
不能同时等于2个值吗?
我需要询问用户的输入,直到选择等于'a'
OR 'd'
,但为什么我需要写&&
?我不明白。
do
{
scanf("%c", &choice);
} while ( choice != 'a' && choice != 'd' );
我想使用||
,但它不起作用。
运算符的工作方式没有任何问题,您需要在此处获取代码的逻辑。
首先,do...while
只要 中的条件while
为 TRUE,循环就会运行。
在您的情况下,您想询问用户的输入,直到选择等于'a'
OR 'd'
。
所以,换一种方式,只要用户输入不等于a
and d
,就需要循环。
从逻辑上讲,如果输入不等于a
,它仍然可以等于d
,因此您必须检查这两种情况。只有当输入都不是输入a
时d
,您才继续循环。
请记住,您不是在检查相等性,而是在检查unequality。仅当两个不等式都满足时,只有while
条件评估为 TRUE_ 并且您继续循环以请求新值。
简而言之,阅读德摩根定律。
我需要询问用户的输入,直到选择等于“a”或“d”
这个条件可以写成
choice == 'a' || choice == 'd'
因此,如果您希望循环迭代直到此条件为真,您应该编写
do
{
//...
} while ( !( choice == 'a' || choice == 'd' ) );
或者是否包含标题
#include <iso646.h>
然后你可以写
do
{
//...
} while ( not ( choice == 'a' || choice == 'd' ) );
甚至喜欢
do
{
//...
} while ( not ( choice == 'a' or choice == 'd' ) );
条件
!( choice == 'a' || choice == 'd' )
或者
not ( choice == 'a' or choice == 'd' )
相当于
!( choice == 'a' ) && !( choice == 'd' )
或者
not ( choice == 'a' ) and not ( choice == 'd' )
这又相当于
( choice != 'a' ) && ( choice != 'd' )
括号可以省略因此你将有
do
{
//...
} while ( choice != 'a' && choice != 'd' );
您可以使用||
. 您需要更改while
循环条件表达式如下
while ( !(choice == 'a' || choice == 'd') );
这只是德摩根定律的一个应用,如何不影响 AND & OR
______ ___ ___
A || B = A && B
______ ___ ___
A && B = A || B
记住它:“打破界限,改变标志”。
INPUT OUTPUT 1 OUTPUT 2
A B NOT (A OR B) (NOT A) AND (NOT B)
0 0 1 1
0 1 0 0
1 0 0 0
1 1 0 0
INPUT OUTPUT 1 OUTPUT 2
A B NOT (A AND B) (NOT A) OR (NOT B)
0 0 1 1
0 1 1 1
1 0 1 1
1 1 0 0
您可以用这个替换条件:
while (!(choice == 'a' || choice == 'd'));
使用此条件do-while
语句将一直执行,直到选择等于 'a' 或 'd'。
如果要使用 or ( ||
) 运算符,则必须应用德摩根定律:
假设 a 和 b 是布尔值,所以
a || b <=> !a && !b
a && b <=> !a || !b
这个,
while ( choice != 'a' && choice != 'd' );
是相同的
while !( choice == 'a' || choice == 'd' );
嘿,它不起作用,因为您希望它不等于 a 和 b。
not equal to a and not equal to b
so it will be !( eqaul to a or eqaul to b) (De morgan's)
德摩根定律说
not( a and b) = not (a) or not(b)
在这里,我简单地应用了那个。