Anfaengerfrage
-
Hi, hab hier ein kleines Problem. Unzwar werden bei der Ausgabe keine geraden Zahlen berücksichtigt. Stattdessen wird 0 angezeigt. Wenn man in der ersten Schleife realfeld[0][++y] = y eingibt, klappt alles wunderbar
const int breite = 9; const int hoehe = 9; struct spielfeld { int zahl; }; spielfeld realfeld[breite][hoehe]; for (int y=0; y <hoehe-1; y++) { for (int x=0; x <breite-1; x++) { realfeld[++x][0].zahl = x; } } for (int x=0; x<breite; x++) { for (int y=0; y<hoehe; y++) { cout << realfeld [x][y].zahl; } cout << endl; }
-
realfeld[++x][0].zahl = x;Erklär mal, was du dir davon erhoffst. Diese Zeile macht das, was du beschreibst. Aber anscheinend ist das nicht deine Absicht. Jedoch weiß ich nicht, was deine Absicht überhaupt ist.
-
Hi, die erste (senkrechte) Zeile soll alle Zahlen von 0-8 anzeigen. Das was sie aber anzeigt ist 010305070. Warum werden keine geraden Zahlen angezeigt?
-
Wie oft erhòhst du denn x?
-
Naja 8 mal also von 0-7, willst du darauf hinaus?
-
Wie oft erhöhst du x pro Schleifendurchgang?
-
Also die Schleifen tauschen? X zuerst? Das klappt. Darauf wolltest du auch hinaus?
-
Nein, darauf wollte ich nicht hinaus.
-
kamelkacke schrieb:
realfeld[++x][0].zahl = x;
Da es noch keiner gesagt hat: UB
(undefined behaviour)Innerhalb desselben Ausdrucks, beziehst du dich auf x 2mal, wobei das eine auch ein Schreibzugriff ist. Weder das eine noch das andere muss vor dem jeweils anderen passieren (unsequenced). Das Verhalten davon ist nicht definiert.
Und sonst: Probier es doch mal mit einem Debugger.
-
Worauf Nathan heraus wollte:
Du erhöhst x in der for-Schleife Zeile 11 und in der Anweisung Zeile 12, also 2 Mal. Wenn man jedes Mal um 2 erhöht und bei 0 anfängt kommen halt genau die geraden Zahlen raus.
-
Zudem ist die eine Schleife unnötig, da du y ja nie benutzt.
-
Ok, Problem geloest, vielen Dank.