3

このコードが&&演算子でのみ機能するのはなぜですか?

あるべきだと思いますが||、間違っています。Choice同時に2つの値に等しくなることはできませんか?

'a'選択がORと等しくなるまでユーザーの入力を求める必要があります'd'が、なぜ書く必要があるの&&でしょうか? 理解できません。

do
{
    scanf("%c", &choice);
} while ( choice != 'a' && choice != 'd' );

を使いたかった||のですが、うまくいきません。

4

6 に答える 6

5

使用できます||while次のようにループ条件式 を変更する必要があります

while ( !(choice == 'a' || choice == 'd') ); 

これは単にDeMorgan の法則の適用であり、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
于 2016-12-27T13:50:07.300 に答える
5

選択肢が「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' );
于 2016-12-27T14:06:10.993 に答える
4

条件を次の条件に置き換えることができます。

while (!(choice == 'a' || choice == 'd'));

この条件do-whileステートメントを使用すると、choice が「a」または「d」と等しくなるまで実行されます。

于 2016-12-27T13:50:16.083 に答える
3

or ( ||) 演算子を使用する場合は、ド モルガンの法則を適用する必要があります。

a と b がブール値だとしましょう。

a || b <=> !a && !b

a && b <=> !a || !b

これ、

while ( choice != 'a' && choice != 'd' );

と同じです

while !( choice == 'a' || choice == 'd' );
于 2016-12-27T13:54:13.877 に答える