我想从列表中读取行到我的结构,它几乎工作。我真的不知道是什么问题,但在文本文件的最后一行不会显示了,当我呼吁结构,我不觉得的话都放在正确的...从文本文件读取行到结构C
void loadFile(char fileName[], Song *arr, int nrOf) {
FILE *input = fopen(fileName, "r");
if (input == NULL) {
printf("Error, the file could not load!");
} else {
fscanf(input, "%d", &nrOf);
fscanf(input, "%*[^\n]\n", NULL);
for (int i = 0; i < nrOf; i++) {
fgets(arr[i].song, sizeof(arr[i].song), input);
fgets(arr[i].artist, sizeof(arr[i].artist), input);
fgets(arr[i].year, sizeof(arr[i].year), input);
}
for (int i = 0; i < nrOf; i++) {
printf("%s", arr[i].song);
printf("%s", arr[i].artist);
printf("%s", arr[i].year);
}
rewind(input);
printf("The file is now ready.\n");
}
fclose(input);
}
文本文件以第一行中的数字开始,以跟踪列表中有多少首歌曲。因此我试着用这个:
fscanf(input, "%d", &nrOf);
fscanf(input, "%*[^\n]\n", NULL);
能够在nrOf获得数字后跳过第一行。
编辑: 这里是结构:
typedef struct Song {
char song[20];
char artist[20];
char year[5];
} Song;
这里是文本文件:
4
Mr Tambourine Man
Bob Dylan
1965
Dead Ringer for Love
Meat Loaf
1981
Euphoria
Loreen
2012
Love Me Now
John Legend
2016
而且结构是动态分配的:
Song *arr;
arr = malloc(sizeof(Song));
这可能是有用的,如果你将包括的一个小文本摘录或示例你正在阅读的文件。这会让我们(其他SO用户)有机会看到你在做什么,所以我们可以更好地为你提供建议。 – SpencerD
可能有助于查看“Song”的定义。 – RoadRunner
如果你想读取行,读取行(* fgets *可以这样),然后将它们解析为字符串(* sscanf *,* strtok *,plain * for * char char *)。 – hyde