Verwenden Sie fgets () und strtok (), um eine Datei zeilenweise in C einzulesen?

Ich versuche, fgets und strtok () zu verwenden, um eine Datei zeilenweise einzulesen und eine verknüpfte Liste der verschiedenen Informationszeilen zu erstellen.

Im Moment stelle ich die Informationen nur in ein Array, nur um herauszufinden, wie die Informationen richtig eingelesen werden, aber es funktioniert nicht richtig.

Im while (fgets) -Teil scheint es, alles richtig in das Array zu laden und es auszudrucken. Nachdem diese Schleife ausgeführt wurde und ich versuche, das gesamte Array auszudrucken, erhalte ich wirklich seltsame Ergebnisse. Dabei handelt es sich zumeist NUR um Teile der letzten Zeile und zum größten Teil nicht um vollständige Wörter oder etwas.

Zum Beispiel, wenn ich lese in:

Simpson, Homer, Male, 1976
Simpson, Marge, Female, 1978
Simpson, Bart, Male, 2002 
Simpson, Lisa, Female, 2004 
Simpson, Maggie, Female, 2011 

Der Ausdruck, den ich am Ende bekomme, sieht ungefähr so ​​aus:

le
Simpson
 Maggie


Simpson
 Maggie
e
ale
Simpson
 Maggie
e
e
Simpson
 Maggie
 Female
 2011

Bitte lassen Sie mich wissen, wo ich falsch liege, danke!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSTRINGSIZE 10
#define LINESIZE 128

struct person{
    char firstName[MAXSTRINGSIZE];
    char lastName[MAXSTRINGSIZE];
    char gender[MAXSTRINGSIZE];
    int birthYear;
    struct person *next;
} *first, *current;


int main (void){
    static const char filename[] = "Assignment1file.txt";
    FILE *myfile = fopen ( "Assignment1file.txt", "r" );

    int i=0;
    int j=0;
    int k=0;
    int l=0;
    char *result[10][4];
    char line[LINESIZE];
    char *value;

    for(i=0; i<9; i++){
        for(j=0;j<4;j++){
            result[i][j] = NULL;
        }
    }
    i=0;

    // loop through each entry in Assignment1file
    while(fgets(line, sizeof(line), myfile)){

        //load last name
        value = strtok(line, ",");
        result[i][0] = value;
        printf("%i 0 %s", i, value);


        //load first time
        value = strtok(NULL, ",");
        result[i][1] = value;
        printf("%i 1 %s", i, value);

        // load gender
        value = strtok(NULL, ",");
        result[i][2] = value;
        printf("%i 2 %s", i, value);

        // load birth year
        value = strtok(NULL, "\n");
        result[i][3] = value;
        printf("%i 3 %s", i, value);
        printf("\n");

        for(j=0;j<4;j++){
            printf("%s\n", result[i][j]);
        }


        //go to next line
        i++;
    }   

    // read out the array
    for(k=0; k<5; k++){
        for(j=0;j<4;j++){
            printf("%s\n", result[k][j]);
        }
    }

    fclose(myfile);
    return 0;
}

Antworten auf die Frage(4)

Ihre Antwort auf die Frage