我有这段代码来读取文件并将所有内容解析为人员列表:
PersonList *parseFile(FILE* file) {
PersonList *list = newPersonList();
int r;
do {
char fname[50];
char name[50];
char gender;
int birthYear;
int deathYear;
r = fscanf(file, "%50s %50s %1s %d %d", fname, name, &gender, &birthYear, &deathYear);
printf("%s %s %c %d %d\n", fname, name, gender, birthYear, deathYear);
// Stuff I want to do in future
} while (r != EOF);
return list;
}
该文件的格式如下:
亚历山大·沃尔纳 1922 年 1957 年伯特伦·霍尔比希勒 1905 年赫敏·沃尔纳 1904 年
字符串字符串 char int int string string int string string int
所以,我试图得到这个人,然后是父母。奇怪的是printf没有打印出这个人的fname。如果我在fscanf中更改fname和name的顺序,则第一个字符串保存在name中,但第二个不在fname中。这种好奇心取决于在第 5,6 行中声明faname和name的顺序。如果我把它们转过来,名字就不再填满了。那是什么黑客?为什么我不能在fname中保存任何字符串?希望有人能解释这种奇怪的行为。谢谢。