1
#include<iostream>
using namespace std;

int main()
{

    char again;
    do
    {
        cout<<"you are in the while loop";
        cout<<"do you want to continue looping?";
        cin>>again;
    } while (again != 'n' || again != 'N');

    system("pause");
    return 0;
}

'while'のテスト条件に問題があることを知っています。しかし、私はそれを理解することはできません。

ユーザーの入力が「n」でも「N」でもない場合、ループは「whileループにいます」というコードを出力し続ける必要があります。「n」または「N」を押すと、プログラムは終了します。

ただし、私のコードの場合、プログラムは、入力した文字に関係なく、コードをループし続けます。しかし、私が'||'を変更すると '&&'にすると、プログラムは必要に応じて実行できます。誰でも何が起こっているのか教えてもらえますか?

4

7 に答える 7

11

これは一般的なブール論理の質問です。 ||「または」を意味します。これは、「これの片側が真である限り、式は真である」という意味です。したがって、大文字'N'c != 'n' || c != 'N' プログラムに渡すと、「まあ、'N'等しくない'n'ので、式の片側が真であるため、式全体が真であり、式の残りの部分をチェックする必要はありません」と言います。小文字を押しても'n'、プログラムは「まあ、'n'等しいが'n'、等しくない'N'ので、式の片側が真であるため、式全体が真である」と言います。これは、whileループで起こっていることです。

一方、&&は「and」を意味し、「表現の両側が真でなければならない」ことを意味します。プログラムに大文字'N'を渡すと、「はに等しくないが、に等しいため、式の片側だけが真であり、したがって式は偽である」と見なされます。c != 'n' && c != 'N''N''n''N'

入力された文字が使用する特定の値と等しいかどうかをテストしている場合(たとえば、「またはが入力されたかどう||を知りたい」)、これは混乱を招きます。'a' 'b' 'c'

基本的に||、特定の式に使用する場合、その式の反対が必要な場合は、次のように変更する必要があります&&(たとえば、、、または;のいずれも'a'必要'b'あり'c'ません。言い換えると、値を指定すること'a' できません。同様に、特定の式に使用'b'し、その式の反対が必要な場合は、を使用する必要がありますこれは、ド・モルガンの法則の1つであり、これを読むことをお勧めします。それぞれを自分で再発見する必要はありません。'c'&&||

于 2009-03-15T07:10:29.187 に答える
10

はい:|| は「または」であり、&&は「および」です。

すべての文字は、「n」と「N」の両方になることはできないため、「n」ではない「N」ではありません。

条件を書き込む別の(おそらく読みやすい)方法は次のとおりです。

!(again == 'n' || again == 'N')

これは、「(これも「n」または「N」のいずれか)の反対」を意味します。

于 2009-03-15T06:59:54.003 に答える
9

「ド・モルガンの法則」と呼ばれるブール代数です。

Not (P And Q) = (Not P) Or (Not Q)
Not (P Or Q) = (Not P) And (Not Q)

あなたの場合、ユーザーが入力し'n'たり'N'、を入力したりしないようにしたい場合は、このロジックに変換できます。

!(again == 'n' || again == 'N')

ド・モルガンの法則を適用すると、

(again != 'n' && again != 'N')

詳細については、命題論理をお読みください。

于 2009-03-15T07:16:30.407 に答える
5

元のポスターは今では満足していますが、他の回答ではこれを見ませんでした:

(true  && true ) == true
(true  && false) == false
(false && true ) == false
(false && false) == false

(true  || true ) == true
(true  || false) == true
(false || true ) == true
(false || false) == false

!true  == false
!false == true

それがすべてです!

于 2009-03-15T07:59:21.987 に答える
2

私はあなたの問題をよく理解しています。ここに説明があります:

do-while ループは終了条件ループです。これは、ループの本体が常に最初に実行されることを意味します。次に、テスト条件が評価されます。テスト条件が TRUE の場合、プログラムはループの本体を再度実行します。テスト条件が FALSE の場合、ループは終了し、プログラムの実行は while に続くステートメントから続行されます。

コードで「n」または「N」を押すと、テスト条件は常に 1 つが true で 1 つが false になります。テスト条件 (true||false=true) を満たすため、プログラムはループの本体を再度実行します。しかし、 && を使用すると、これにより (true && false =false) が得られ、テスト条件が満たされないため、プログラムはループの本体を再度実行しません。

お役に立てば幸いです.....プログラミングをお楽しみください! アメララジ

于 2013-02-03T23:41:31.447 に答える
1

&&は論理積です。|| 論理ORです。

(また、&はビット単位のANDであり、|はビット単位のORです。)

于 2009-03-15T07:00:16.827 に答える
0

while(!(again =='n' || again =='N'))を試してみてください

于 2009-03-15T07:01:09.693 に答える