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;
}