从C中的文件获取结构
我在从文件中读取结构时遇到问题。我觉得这有点明显,但我不能理解。 这是我的密码:从C中的文件获取结构,c,C,我在从文件中读取结构时遇到问题。我觉得这有点明显,但我不能理解。 这是我的密码: while ((c = fgetc(fp)) != EOF) { ungetc(c, fp); fscanf(fp, "%d", &stud_list[i].group); do { c = fgetc(fp); } while (c != '\n' && c != EOF); fgets(stud_list[i].surname, 50, fp);
while ((c = fgetc(fp)) != EOF) {
ungetc(c, fp);
fscanf(fp, "%d", &stud_list[i].group);
do { c = fgetc(fp); } while (c != '\n' && c != EOF);
fgets(stud_list[i].surname, 50, fp);
stud_list[i].surname[strcspn(stud_list[i].surname, "\n")] = 0;
fgets(stud_list[i].name, 50, fp);
stud_list[i].name[strcspn(stud_list[i].name, "\n")] = 0;
fgets(stud_list[i].patronymic, 50, fp);
stud_list[i].patronymic[strcspn(stud_list[i].patronymic, "\n")] = 0;
fscanf(fp, "%d", &stud_list[i].year);
do { c = fgetc(fp); } while (c != '\n' && c != EOF);
for (j = 0; j < 4; j++)
fscanf(fp, "%d ", &stud_list[i].marks[j]);
fscanf(fp, "%d", &stud_list[i].marks[4]);
i++;
}
我得到的是:
11аааааааа
аааа
ааач
1990年
5 12
12
МааааСааа аааааааааа ааааааааааач
1893年
5 4
4
0
0
我希望你会发现一个错误。提前感谢!:) 你得到了什么?那个文件是如何编码的?它肯定不是ASCII。“它打印不正确”,我们是否应该认为这意味着输出文件包含文本“不正确”?如果没有,你能告诉我们你得到了什么吗?是windows-1251。它在下面打印相同的结构和过多的零。红色始终是一个错误:不测试fscanf()的返回值。您只需假设输入格式正确。可能不是。
while (stud_list[t].group) {
fprintf(fp, "%d\n", stud_list[t].group);
fputs(stud_list[t].surname, fp);
fputc('\n', fp);
fputs(stud_list[t].name, fp);
fputc('\n', fp);
fputs(stud_list[t].patronymic, fp);
fputc('\n', fp);
fprintf(fp, "%d\n", stud_list[t].year);
for (j=0;j<4;j++)
fprintf(fp, "%d ", stud_list[t].marks[j]);
fprintf(fp, "%d\n", stud_list[t].marks[4]);
t++;
}
11
Иванов
Иван
Иванович
1990
5 5 5 5 5
12
Маяковский
Владимир
Владимирович
1893
5 5 5 5 4