Mehrdimensionale Reihung



  • Hallo,

    ich muss ein Programm schreiben das mir ein Spielfeld ausgibt.
    Ich hab leider noch nicht mit Mehrdimensionalen Reihung gearbeitet und
    hab auch nichts passendes darüber im Netz gefunden.
    Ist für euch sicherlich ein Witz!!!

    #include <stdio.h>

    int main(void)
    {
    char screen[5][10];
    int x=0;
    int y=0;

    for(x=0; x<5; x++)
    {
    for(y=0; y<10; y++)
    {
    if(x==0 || x==4 || y==0 || y==9)
    screen[x][y] = '*';
    else
    screen[x][y] = '.';
    }
    printf("%s",screen);
    }

    return 0;
    }

    Wenn ich des Prog starte kommen zwar *, aber noch lauter andere Zeichen.

    Ich wäre sehr dankbar, wenn mir jemand einen Tip geben könnte wie man den screen
    fehlerfrei ausgibt.

    Gruss
    Torsten



  • 1. Bitte C/C++ Tags für C Code verwenden.
    2. Du hast ja quasi ein Array von 5 Strings mit der Länge 10. Die Länge 10 stimmt nicht, da Strings in C nulllterminiert sein müssen. Wenn Strings nicht nullterminiert sind, wissen Funktionen wie z.B. printf() nicht wann der String endet und schreiben solange weiter, bis zufällig eine Null ('\0' oder 0) im Speicher liegt.
    3. Deine Ausgabe mit printf() ist falsch. Ein char foo[][] ist (siehe 2.) ein Array aus Strings. Du musst aber immer nur einen String auf einmal ausgeben.

    Hier der korrigierte Code, bitte Kommentare lesen und verstehen:

    #include <stdio.h>
    #include <string.h> //fuer memcpy()
    
    int main(void)
    {
        // hier die Groesse fuer die terminierende Null beachten
        char screen[5][11];
        int x=0;
        int y=0;
    
        // Damit setzt man den gesamten Speicher des Arrays auf Null
        memset(screen,0,sizeof(screen));
    
        for(x=0; x<5; x++){
            for(y=0; y<10; y++){
                if(x==0 || x==4 || y==0 || y==9)
                    screen[x][y] = '*';
                else
                    screen[x][y] = '.';
            }
            printf("%s\n",screen[x]); // Nur ein String ausgeben und Zeilenumbruch reinmachen
        }
        return 0;
    }
    


  • TactX schrieb:

    Ein char foo[][] ist (siehe 2.) ein Array aus Strings.

    naja, eher nicht. es ist ein normales eindimensionales array, aber der compiler versteht die [][] syntax und rechnet fuer dich array[x + y*spalten]



  • Hmmm, wo ist nun der Widerspruch zu meiner Aussage? Das einzige was an meiner Aussage nicht ganz korrekt war ist, dass ein char[] nicht unbedingt ein String sein muss.



  • edit: sorry, hab mich geirrt. ich untersuch das wohl besser noch etwas...



  • Nochmals vielen Dank,
    der Code funktioniert optimal.

    Thx


Anmelden zum Antworten