&&の使用の違いは何ですかおよび|| do…whileループで?

StackOverflow https://stackoverflow.com/questions/647413

  •  22-07-2019
  •  | 
  •  

質問

#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;
}

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

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

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

役に立ちましたか?

解決

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

一方、&amp;&amp; は「および」を意味します。つまり、「式の両側が真でなければならない」ということです。大文字の 'N' c!= 'n'&amp;&amp;に渡すとc!= 'N' プログラムは、&quot; 'N' 'n' と等しくないが、 'Nと等しいと考える'、したがって式の片側のみが真であるため、式は偽です。&quot;

これは混乱を招きます。入力した文字が特定の値と等しいかどうかをテストする場合、 || を使用するためです(例:&quot; 'a' または 'b' または 'c' が入力されました&quot;)。

基本的に、特定の式に || を使用し、その式の反対が必要な場合は、&amp;&amp; に変更する必要があります(例: 、 'a' 'b' 、または 'c' のいずれも必要としないか、別の言い方をすると、値を< code> 'a' および 'b' および 'c' code>&quot;)。同様に、特定の式に&amp;&amp; を使用し、その式の反対が必要な場合は、 || を使用する必要があります。これはDe Morganの法則の1つです。各法則を自分で再発見する必要がないように、読み進めることをお勧めします。

他のヒント

はい:||は「または」ですおよび&amp;&amp; &quot; and&quot;です。

すべての文字は、 either &quot; not 'n'&quot;です。または&quot; not 'N'&quot;なぜなら、両方 'n'と 'N'を同時に使用することはできないからです。

別の(おそらく読みやすい)条件を記述する方法は次のとおりです。

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

これは&quot;の反対(再び 'n'または 'N')&quot;を意味します。

&quot; De Morganの法則&quot;と呼ばれるブール代数です。

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')

詳細については、命題論理

をお読みください。

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

(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

これですべてです!

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

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

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

これがお役に立てば幸いです... アメララディ

&amp;&amp;論理ANDです。 ||論理ORです。

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

while(!(again == 'n' || again == 'N'))を試してみるとよいでしょう

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top