textdatei in ein zweidimensionales array einlesen



  • hallo!

    ich möchte ein Textdatei in ein zweidimensonales Feld einlesen.
    dazu habe ich folgendes geschrieben. Dies hagt jedoch an vielen ecken und kannten

    #include <iostream.h>
    #include <stdlib.h>
    #include <stdio.h>
    #define SIZE 100
    
    void makearray(char *labyrinth)
    {
       int x,y=0;
       FILE *file;
       char *zeiger;
       char buffer[265];
       file= fopen("test.txt", "r");
    
       zeiger = fgets(buffer, 264, file);
    
       while(zeiger)//hier wird gemeckert, das *char nicht auf int gecastet werden könne
       {
          while(zeiger!='\n')
          {
            labyrinth[x][y] =zeiger;//hier hackts auch
            y++;
          }
          x++;
       }
    
    }
    
    int main()
    {
            char labyrinth[SIZE][SIZE];
            makearray(labyrinth);//die übergabe als array funzt auch icht so recht
    
    }
    

    So richtig komm ich nicht weiter. Ein einfaches einlesen und auf dem Bildschirm ausgeben klappt aber eben nicht mit der zuweisung in ein array.
    gruß niesel



  • Du kannst nicht einfach so einen Zeiger auf ein zweidimensionales Array an eine Funktion übergeben; die Funktion hat ja dann keine Chance zu wissen, wie viele Spalten das 2D-Array hat. Das dürfte weiterhelfen: http://c-faq.com/aryptr/pass2dary.html

    Und bei zeiger!='\n' musst du zeiger dereferenzieren, daher die kann-nicht-nach-int-casten-Warnung.



  • ich habe das Prog nochmal geändert. jedoch hab ich hier noch dieses Probelm, dass das zeichen nicht an das Array übergeben wird.

    #include <iostream.h>
    #include <stdlib.h>
    #include <stdio.h>
    #define SIZE 100
    
    char makearray(char *labyrinth)
    {
       int x,y=0;
       FILE *file;
       int c;
       file= fopen("test.txt", "r");
       while((c=fgetc(file))!=EOF)
       {
          while((c=fgetc(file))!='\n')
          {
            labyrinth[x][y] =putchar(c);//hier soll das zeichen an die Arrayposition übergeb werden. doch es kommt hier zu meldung invalid types `char[int]' for array subscript
            y++;
          }
          x++;
       }
    }
    int main()
    {
            char labyrinth[SIZE][SIZE];
            makearray(&labyrinth[SIZE][SIZE]);
    }
    

    gruß niesel



  • Du musst den Typ des Funktionsparameters ändern:

    void makearray(char labyrinth[][SIZE])
    

    Aufrufen kannst du die Funktion dann einfach mit

    char labyrinth[SIZE][SIZE];
    makearray(labyrinth);
    

    Und in der Funktion kannst du das Zeichen mit

    labyrinth[x][y] = c;
    

    ins Array speichern.

    Abgesehen davon funktionieren deine Schleifen nicht so wie du es willst; du vergisst immer das erste Zeichen jeder Zeile.



  • jetz habe ich nur noch zwei kleine probleme
    wennich z.B. die textdatei

    123456789
    ABCDEF
    ****************************
    *..........................*
    ****************************
    

    so ausgeben werden

    23456789
    BCDEF
    ***************************
    ..........................*
    ***************************
    

    also ein zeichen wird weg gelassen.
    dazu habe ich mal folgende testausgabe gemacht

    while((c=fgetc(file))!='\n')
          {
           printf("c=%c\n",c);
    ....
    

    da wird c nie das erste zeichen der textdatei bw der Zeile zugewiesen

    gruß niesel



  • Es wird ja auch schon durch die Überprüfung auf EOF jeweils das erste Zeichen einer Zeile weggelesen.

    Ich würde es z.B. einfach so machen:

    while ((c = fgetc(file)) != EOF)
    {
        if (c == '\n') { x++; y = 0; }
        else labyrinth[x][y++] = c;
    }
    

    Alternativ gibt es auch eine Funktion feof(), mit der man überprüfen kann, ob eine Datei am Ende ist, ohne ein Zeichen rauszulesen.

    Und in richtigen Programmen bitte sicherstellen, dass die Arraygrenzen eingehalten werden 😉


Anmelden zum Antworten