为什么此代码仅适用于&&操作员?
我认为应该是||,但我错了。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'。
所以,换一种方式,只要用户输入不等于aand 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)
在这里,我简单地应用了那个。