Problem mit Ausgabe eines zweidimensionalen Arrays



  • Also ich bin Momentan dabei ein einfaches MrWorms-Spiel (kennen einige eventuell von früher, war auf nem Nokia Handy) zu programmieren. Um das Spielfeld darzustellen möchte ich einen 10x10 Array voll Nullen machen, mein Problem ist jedoch, dass ich bei der Ausgabe dieses Arrays ziemlich komische Zahlen erhalte

    [cpp]#include <stdio.h>

    int main() {

    int spielfeld[10][10];
    int x1=0,y1=0;
    int x2=0,y2=0;

    while(x1<10) {
    spielfeld[x1][y1] = 0;
    x1++;
    while(y1<10) {
    spielfeld[x1][y1] = 0;
    y1++;
    }
    }

    while(x2<10) {
    while (y2<10) {
    printf("%d ",spielfeld[x2][y2]);
    y2++;
    }
    printf("\n");
    y2=0;
    x2++;
    }
    }

    Das ist mein Code und das hier gibt er mir aus:

    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 1750880084 32767
    0 32767 1750884111 32767 1750834096 32767 1750893203 32767 1750834448 32767
    0 32767 1750834224 32767 1750840090 32767 0 0 144416768 1
    0 32767 0 32767 1750837024 32767 1750837040 32767 0 1
    0 32767 914959043 2055648629 0 0 0 0 0 0

    Kann mir da eventuell jemand helfen. Wäre echt sehr nett, danke im Voraus.

    PS: ich arbeite übrigens auf nem MacBook mit der IDE CodeRunner


  • Mod

    Deine Initialisierungsschleifen sind falsch. Vergleich mal die oberen beiden verschachtelten Schleifen mit den unteren beiden verschachtelten Schleifen und denk darüber nach, ob du oben wirklich alle Elemente erwischt.

    P.S.: Schonmal was von for-Schleifen gehört?

    P.P.S.: Und benutz bitte die [cpp]-Tags für Code, dann kann man das auch lesen.



  • @SeppJ Sorry, hab erst vor 3 Wochen angefangen mit C-Programmierung, hab vorher nur mit HTML und PHP gescriptet. Ich habs mir jetzt nochmal angeguckt und es werden doch eigentlich alle Elemente des Arrays der Wert 0 zugefügt.

    Mit for-Schleife meinst du for(i=0,i<10,i++) {...} ?
    das habe ich jetzt gerade angeschaut in meinem Buch, dass ich mir extra gekauft hab. Werde ich gleich anwenden, jedoch wird es mir nicht zur Lösung des Problem weiterhelfen wenn ich das richtig verstanden habe.

    PS:Nächstes mal werde ich den Code mit den Tags schreiben, bin neu hier, sorry.

    EDIT:
    Ahja, jetzt habs ich ausprobiert und tatsächlich wenn ich den Array mit der fortschleife fülle klappt es.
    Aber woran lag das denn jetzt genau?


  • Mod

    Wie schon gesagt, deine Schleifen oben waren schlichtweg falsch. Guck mal hier, um nachzuvollziehen, warum:
    http://ideone.com/SBB5c



  • Ganz einfach:

    while(x1<10) { 
      spielfeld[x1][y1] = 0; 
      x1++; 
    
      while(y1<10) { 
         spielfeld[x1][y1] = 0; 
         y1++; 
      } 
    }
    

    y1 wird nicht mehr auf 0 gesetzt, weiteres ist die reinítialisierung von x1 falsch ^^

    Denn: du wechselst in die zweite Zeile bevor du die 1. Zeile verarbeitest. Weiteres wird, nach dem du Zeile 2 im ersten Durchlauf bearbeitet hast, die
    Laufvariable y1 für die spalten nicht wieder auf 0 gesetzt, folglich müsstest du einen Zugriffsfehler erhalten, da du die Array-größe überschritten hast.

    Richtig wäre es so:

    int main(void) {
    
      int tab[10][10];
      int i,j;
    
      for(i=0; i<10; i++) 
        for(j=0; j<10; j++) 
           tab[i][j]=0;
    
      for(i=0; i<10; i++) 
        for(j=0; j<10; j++) 
           printf("%d ", tab[i][j]);
    
      return 0;
    }
    


  • @SeppJ und itedvo
    Dankeschön ihr beiden, habe meinen Fehler jetzt gefunden, vielen dank für eure schnelle und professionelle Hilfe 😉



  • @itedvo
    Bei der Ausgabe fehlt noch das \n am Ende jeder Zeile.



  • DirkB schrieb:

    @itedvo
    Bei der Ausgabe fehlt noch das \n am Ende jeder Zeile.

    Ansichtssache, ich hab ja ein Leerzeichen drinnen 😉
    Schöner wärs natürlich so:

    printf("tab[%d][%d]: Value = %d\n", i, j, tab[i][j]);
    

    Aber ich bin nicht gerade als kreativer Mensch bekannt, es muss Funktionieren und nach dem Standard der Entwicklungsumgebung
    passen 😉


Anmelden zum Antworten