C++ while-Anweisung nicht gleich überprüft
Ich begann das Programmieren in C++ (VS 2015).
Schrieb ein kleines Programm, welches mit Hilfe einer while-Anweisung.
#include <iostream>
using namespace std;
int main() {
int x = 1;
int y = 2;
int z = 0;
while (x != y || z != y) {
cout << "x: " << x << "\n" << "z: " << z << "\n";
x++;
z++;
}
cin.get();
}
Wenn ich das richtig sollte es so (aber da es sich um eine unendliche Schleife, ich denke, meine Logik ist nicht so korrekt, wie ich denke).
So, in meinem Kopf der while-Anweisung sollten die arbeiten in dieser Weise.
Während X nicht gleich y ODER z nicht gleich y.
+1 zu X und +1 zu Z.
Tun Sie dies, bis die Aussage wurde wahr (oder mindestens die linke Seite des Ausdrucks).
- Bitte den code Debuggen, und die Antwort wird offensichtlich. Legen Sie einen Haltepunkt auf
z++
und dann werden Sie in der Lage sein zu sehen, wie die Werte jener Variablen, die bei jeder iteration. Auf Stack Overflow, die Sie brauchen, zu bemühen, um das problem zu lösen, bevor Sie es veröffentlichen. - Das richtige Werkzeug, um solche Probleme zu lösen, ist der debugger. Sollten Sie Schritt für Schritt durch den code Zeile für Zeile vor Fragen auf Stack Overflow. Für weitere Hilfe, Lesen Sie bitte gewusst Wie: Debuggen von kleinen Programmen (von Eric Lippert). Auf ein minimum, Sie sollten [Bearbeiten] Ihre Frage an einen Minimale, Vollständige und Überprüfbare Beispiel, reproduziert Ihr problem, zusammen mit den Beobachtungen, die Sie gemacht in den debugger.
- Dies ist ein
while
- Schleife, keineuntil
Schleife. Es Schleifen, bis seine Bedingung mit false ausgewertet wird. Auch, bitte loswerdenusing namespace std;
. - Nun, verwendet die thebugger schon. Vielleicht ist meine Frage nicht die richtige, weil Sie die Barriere der Sprache. Und meine beiden (debbuging-Methode mit cout) und der VS-debugger hat das gleiche Ergebnis. breakpointed bei den Z++ - Aufruf. x=2; y=2; und z 1 nach. dann ist die Funktion überprüfen Sie es. wenn ich dieses richtig (zumindest den ODER-operator) "wenn auf der linken Seite Ausdruck true ist, wird das kombinierte Ergebnis ist true (der rechten Seite den Ausdruck nie ausgewertet)." X ist gleich Y, und es sollte halt die Schleife.
- Stoppen Sie Ihre Schleife, die Bedingung muss
false
- Darf ich Fragen, was ist Los mit
using namespace std;
- Froh, dass du fragst! stackoverflow.com/questions/1452721/...
- Übrigens, Sie sollten auch loszuwerden, die
cin.get()
Aufruf am Ende.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schleifendurchläufe
x=1
,y=2
,z=0
, Zustand:true
x=2
,y=2
,z=1
, Zustand:true
x=3
,y=2
,z=2
, Zustand:true
. . . und so weiter
Die Bedingung nie wahr
false
und führt zu einer Endlosschleife. Überlegen und Betreiber, um die Schleife endlich, oder vielleicht ändern einige Werte.Ausgabe
Gibt es keine iteration, wo die beiden Ihre Bedingungen werden ausgewertet, um
false
an einem bestimmten Punkt, damit die Schleife nicht beendet.Können Sie ganz einfach untersuchen, das Verhalten durch einen Schritt durch den code mit einem debugger, und beobachten Sie, wie sich die Variablenwerte ändern.
Den 1. Ausdruck der while-Bedingung immer false nach der ersten iteration.
der 2. Ausdruck ist immer false nach ein paar iteration, aber nach der ersten Ausführung wird der erste Ausdruck wird immer wieder wahr, und das Programm läuft ewig, da Endlosschleife.
wird die Schleife halten iteriert, weil, wenn die x-und y-Wert ist erhöht, es wird nie 0 werden, das entspricht dem Wert, der zugewiesen wird, um y. (einfache Logik)
Ändern Sie diese Aussage-> while(x!=y||z!=y) in this-> while(x!=y && z!=y)
sollten Sie mit der Ausgabe:
x:1
z:0