Frage

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

ich weiß etwas mit der Testbedingung in dem ‚while‘ falsch ist. Aber ich kann es nicht herausgefunden.

, wenn die Eingabe des Benutzers ist weder ‚n‘ noch ‚N‘, soll die Schleife hält auf dem Druck den Code „Sie sind in der while-Schleife“. Sobald ‚n‘ oder ‚N‘ gedrückt wird, wird das Programm beendet werden.

Doch für meinen Code, Programm des Code hält auf Looping unabhängig welcher Charakter i eingeben. Aber wenn ich die ‚||‘ ändern auf ‚&&‘ kann das Programm lief wie gewünscht. Wer kann mir sagen, was los ist?

War es hilfreich?

Lösung

Dies ist eine gemeinsame Boolesche Logik Frage. || bedeutet „oder“, was bedeutet, „solange eine Seite dieses wahr ist, dann wird der Ausdruck wahr ist.“ Also, wenn Sie ein Groß 'N' passieren, das Programm c != 'n' || c != 'N' sagt: „Nun, 'N' nicht gleich 'n' also einer Seite des Ausdrucks wahr ist, also der ganze Ausdruck ist wahr, und es besteht keine Notwendigkeit, den Rest des Ausdrucks zu überprüfen. " Auch wenn Sie Klein 'n' drücken, sagt das Programm „gut, 'n' ist gleich 'n', aber es ist nicht gleich 'N', damit eine Seite des Ausdrucks wahr ist, also der gesamte Ausdruck wahr ist.“ Dies ist, was in Ihrer while-Schleife geschieht.

Auf der anderen Seite bedeutet && „und“ was bedeutet, „beiden Seiten des Ausdrucks wahr sein müssen“; wenn Sie ein Groß 'N' passieren, das Programm c != 'n' && c != 'N' denkt „'N' zu 'n' nicht gleich ist, aber es ist gleich 'N' daher nur eine Seite des Ausdrucks wahr ist, daher der Ausdruck falsch ist.“

Dies wird verwirrend, denn wenn Sie prüften, ob die eingegebenen Zeichen auf bestimmte Werte gleich waren Sie || (zB „Ich möchte wissen, ob 'a' oder 'b' oder benutzen würde 'c' eingegeben wurde ").

Grundsätzlich, wenn Sie || für einen bestimmten Ausdruck verwenden würde, und Sie wollen das Gegenteil dieses Ausdrucks, dann müssen Sie auf && ändern (zB, ich will nichts von 'a', 'b' oder 'c', oder anders ausgedrückt, der Wert kann nicht 'a' und nicht 'b', und kann nicht 'c' "). Ebenso werden können, wenn Sie && für einen bestimmten Ausdruck, und Sie wollen das Gegenteil verwenden würden, dieses Ausdrucks, dann müssen Sie || verwenden. Dies ist eines der De Morgan Gesetze, die ich Ihnen Sie vermeiden können, auf so mit lesen, würde empfehlen, jeder von ihnen auf eigene Faust entdecken.

Andere Tipps

Ja: || wird "oder" und && ist "und".

alle Charakter entweder "nicht 'n'" oder "nicht 'N'", weil es nicht nur sein kann beide ' n‘und 'N' gleichzeitig.

Ein weiterer (wahrscheinlich einfacher zu lesen) Weg, um den Zustand des Schreibens wäre:

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

was bedeutet "das Gegenteil von dem (wiederum ist entweder 'n' oder 'N')."

Es ist die Boolesche Algebra " De Morgan Gesetze ".

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

In Ihrem Fall Sie mögen, dass Benutzer nicht 'n' oder 'N' einzugeben, kann es diese Logik übersetzt in werden.

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

Wenn De Morgan Gesetze anwenden, wird es

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

Für mehr Informationen, möchten Sie vielleicht Aussagenlogik

lesen

Obwohl das ursprüngliche Plakat nun glücklich ist, ich habe dies nicht in den anderen Antworten:

(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

Das ist alles!

Ich verstehe Ihr Problem gut, und hier ist die Erklärung:

Die do-while-Schleife ist eine Exit-Zustand Schleife. Dies bedeutet, dass der Körper der Schleife immer zuerst ausgeführt wird. Dann wird die Testbedingung ausgewertet. Wenn die Testbedingung WAHR ist, führt das Programm den Körper der Schleife erneut. Wenn die Testbedingung FALSE ist, wird die Schleife beendet und die Programmausführung wird mit der Anweisung nach der Zeit.

in Ihrem Code, wenn Sie Press'n ‚or'N‘, Ihre Testbedingung wird immer eine wahre und eine falsche, so, wenn Sie verwenden || Sie den Test Bedingung erfüllen wird (true || false = true), so wird das Programm wieder in den Körper der Schleife auszuführen. aber wenn man && verwenden, gibt dieser Wille (true && false = false), wird die Testbedingung nicht statisfied mehr, so dass das Programm den Körper der Schleife wieder nicht aus.

Ich hoffe, das ist hilfreich ..... genießen programing! Ameraradi

&& ist eine logische UND. || OR ist eine logische.

(auch & ist eine bitweise AND, und |. Ist eine bitweise OR)

Sie möchten vielleicht versuchen, während (! (Wieder == 'n' || wieder == 'N'))

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top