Mehrere ODER-oder UND-Bedingungen in der IF-Anweisung
Ich habe eine basic Frage bezüglich IF-Anweisung.
Lassen Sie uns sagen, ich will match-string-SONNE mit einem Zeichen-array(Größe 3).
if(arr[0]!='S' || arr[1]!='U' || arr[2]!='N')
cout << "no";
else
cout<< "yes";
Sind alle Bedingungen überprüft, in der If-Anweisung, oder muss er true zurückgeben, auf den ersten mismatch?
Wenn alle Voraussetzungen geprüft sind, wird die Reihenfolge der Prüfung werden von rechts nach Links?
- Sind Sie mit c oder c++?
- Beachten Sie, dass es nicht wirklich ein c-Stil-string (ohne null-Terminierung)
- Dieses wird von C++ nicht C. Sie Bearbeitet die post, um dieses Problem zu beheben.
- C und C++ nicht "bewerten" irgendeine bestimmte Richtung, Sie Kurzschluss in Fällen wie diesem.
- das ist c++, die Bedingungen werden überprüft, bis die ersten Ausfall der Bedingung, und dann wird es fallen. (I. E. es Kurzschlüsse auf der ersten Bewertung, fällt aus)
- Sie tun bewerten in einem bestimmten, besonderen Richtung, von Links nach rechts. Und es gibt einen sequence point in zwischen jeder Bewertung. Der compiler kann stoppen die weitere Auswertung des||, sobald es festgestellt hat ein operand den Wert true ergibt.
- Eine Kette von
||
und&&
ausgewertet wird von Links nach rechts. Wenn das Ergebnis bestätigt werden kann, bevor Sie erreichen das Ende des Ausdrucks Kette, die Berechnung vorzeitig beendet. - Vielleicht sollte ich noch klären: "Bewerten" hat starke Auswirkungen, zumindest für mich, von interpretierten Sprachen. Binärdateien werden nicht "bewertet" at runtime. Und das, was Sie gerade beschrieben habe, ist das, was ich gerade verlinkt.
- Sollten Sie diese Artikel, es ist ziemlich genial erklärt 😉 stackoverflow.com/q/23940505/2003898
- Evaluation in diesem Kontext, bezieht sich auf die Reihenfolge der Auswertung (von Operanden zu einem bestimmten operator), das ist ein formaler Begriff, der in der C-und C++ - standards.
- Hoffen wir also, " dazu führen, dass der code sieht ein wenig suspekt. Ich kann Bearbeiten und einzustellen, die kommentieren, wenn Sie möchten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Entsprechend der C++ - Standard
und
Es gibt "true" zurück, die auf den ersten überein. Operatoren in C und C++ - "kurz-Schaltung". Das ist ein ODER-operator wird nicht auswerten der rechten Seite, wenn die linke Seite true zurück. Der UND-operator wird nicht auswerten der rechten Seite, wenn die linke Seite falsch zurückgegeben.
If-Anweisung, die Sie ausführen schrieb
cout << "no";
wenn MINDESTENS eine der Bedingungen erfüllt ist.In diesem Fall, wenn Sie Ihre Eingabe ist "GUN", das Programm prüft, ob:
Als die erste Bedingung erfüllt ist, wird das Programm ausführen
cout << "no";
.Wenn die if-Anweisung war:
Ausführen
cout << "no";
ALLE Voraussetzungen hatte, um zufrieden zu sein.Für "GUN" wie es sein würde:
Da es zwei NEIN, das Programm würde führen
cout<< "yes";
.Also: