Frage über die while Schleife
-
Hallo Leute,
ich habe den folgenden Code,
#include <iostream> using namespace std; int main() { int n {7}; while (n-- > 0) cout << --n; cout << n; return 0; }
Die Ausgabe ist : 531-1-2
ich kann aber nicht begreifen wieso ich zum Schluss -2 kriege? Hat jemand eine Idee?
-
Zunächst mal ist es hilfreich, den Code einzurücken:
int main() { int n {7}; while (n-- > 0) cout << --n; cout << n; return 0; }
Vereinfache den Code doch mal und starte gleich mit n = -1 (7,5,3,1 scheinen dir ja klar zu sein). Denk doch mal nach und beschreibe, was nun bei folgender Zeile passiert:
while (n-- > 0)
PS: ich würde am Ende noch ein '\n' ausgeben.
-
wob schrieb:
Zunächst mal ist es hilfreich, den Code einzurücken:
int main() { int n {7}; while (n-- > 0) cout << --n; cout << n; return 0; }
Vereinfache den Code doch mal und starte gleich mit n = -1 (7,5,3,1 scheinen dir ja klar zu sein). Denk doch mal nach und beschreibe, was nun bei folgender Zeile passiert:
while (n-- > 0)
PS: ich würde am Ende noch ein '\n' ausgeben.
Vielen Dank für deine Antwort! Wenn ich n = -1 zuweise kriege ich nur -2 als Ausgabe. Ich glaube diese Zeile bzw Anweisung
while (n-- > 0)
wird einmal kompiliert da wird n = -2 und weil n kleiner als 0 ist wird diese Zeile
cout << --n;
nicht berücksichtigt.
Der Compiler wird es überspringen und wird -2 ausgeben.Habe ich es richtig verstanden?
-
Also Postfix heißt ja "mach die Operation aber liefer mir den alten Wert zurück".
Also steht im ersten Durchgang:int n = -1; while (-1 > 0) // false = Schleife ist schon zu Ende... die Schleife wird gar nie durchlaufen.
Und nach der Schleife gibst du ja einfach nur
n
aus. Undn
wurde im Schleifenkopf einmal dekrementiert, ist also nun-2
:cout << n; // -2
-
out schrieb:
Also Postfix heißt ja "mach die Operation aber liefer mir den alten Wert zurück".
Also steht im ersten Durchgang:int n = -1; while (-1 > 0) // false = Schleife ist schon zu Ende... die Schleife wird gar nie durchlaufen.
Und nach der Schleife gibst du ja einfach nur
n
aus. Undn
wurde im Schleifenkopf einmal dekrementiert, ist also nun-2
:cout << n; // -2
Hab mir auch so gedacht, vielen Dank!