Was mache ich falsch?
-
Hallo,
ich verstehe das Ergebnis des Programms nicht. Die Ausgabe ist nicht so wie ich es erwartet habe. Was mache ich falsch?
int v[10]; int i=0; while(i<10) { v[i] = i++; cout<<v[i]; }
-
int v[10]; int i=0; while(i<10) { v[i] = i; cout<<v[i]; i++ }du verzählst dich

-
v[i] = i++; cout<<v[i];in zeile 2 bist du um 1 höher als noch in zeile 1, darum kommt nix raus
-
Genau, denn i++ heisst das beim nächsten aufruf von i es um 1 erhört wird, das ist wenn du den array ausgeben willst, also ist dein array 1 element weiter als das in dem du zuletzt geschrieben hast
-
Vielen Dank! Das habe ich übersehen.
Ich habe noch eine Frage zu dem Thema und zwar, wenn ich die Werte addiere mit dem ++, verstehe ich das Ergebnis nicht wirklich

int i=2; i = i++ + i++; cout << i;Ich bekomme immer 6 als Ergebnis aber müsste da nicht 4 herauskommen?
-
versuch mal:
int i=2; cout << i++ + i++;und nun wunder dich

-
Zum erklären:
du rechnest nicht 2 + 2, sondern 2 + 3 was 5 ist, bei der ausgabe wird dann wieder um 1 erhöht, ist also 6, ganz einfach wa

-
Neulinger schrieb:
Die Ausgabe ist nicht so wie ich es erwartet habe. Was mache ich falsch?
Welche Ausgabe hast Du bekommen und welche Ausgabe erwartest Du?
Neulinger schrieb:
int v[10]; int i=0; while(i<10) { v[i] = i++; cout<<v[i]; }Was bei
v[i] = i++;passiert -- also in welcher Reihenfolge -- ist gar nicht festgelegt. Du greifst hier nämlich 2mal lesend auf i und einmal schreibend zu, ohne dass ein sogenannter "Sequenzpunkt" dazwischen ist. Operationen, die von zwei Sequenzpunkten eingeschlossen sind, dürfen nämlich in einer beliebigen Reihenfolge ausgeführt werden (sofern möglich). Von daher kannst Du Dich da auf nichts verlassen. Nach dieser Zeile gilt auch nicht mehr unbedingt i<10. i wird im letzten Durchlauf 10 sein, was dann beim Zugriff v[i] undefiniertes Verhalten hervorruft, weil v kein elftes Element hat.
-
Das Ergebnis von
i++ + i++ist undefiniert mangels Sequenzpunkten. An welchen Stellen der Anweisung i erhöht wird, ist dem Compiler überlassen und kann von Compiler zu Compiler variieren.
-
Hier steht das auch nochmal auf Stroustrup's-HP: http://www2.research.att.com/~bs/bs_faq2.html