fgets と strtok() を使用してファイルを 1 行ずつ読み込み、各行の情報のリンク リストを作成しようとしています。
現在、情報を配列に入れているだけで、情報を正しく読み取る方法を見つけようとしていますが、正しく機能していません。
while(fgets) 部分では、すべてを配列に適切にロードし、出力しているようです。ただし、そのループが実行された後、配列全体を出力しようとすると、非常に奇妙な結果が得られます..これはほとんどが最後の行の一部のみであり、ほとんどの場合、完全な単語などではありません。
たとえば、私が読んでいる場合:
Simpson, Homer, Male, 1976
Simpson, Marge, Female, 1978
Simpson, Bart, Male, 2002
Simpson, Lisa, Female, 2004
Simpson, Maggie, Female, 2011
最後に得られるプリントアウトは次のようなものです。
le
Simpson
Maggie
Simpson
Maggie
e
ale
Simpson
Maggie
e
e
Simpson
Maggie
Female
2011
どこが間違っているのか教えてください、ありがとう!
#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;
}