void read() { struct info_s info1[N]; FILE *Q; Q = fopen("学科信息条数.txt", "rb"); fscanf(Q, "%d", &count); count=(int)count; printf("%d", count); fclose(Q); FILE *P; // count =3; if (P = fopen("infomation.txt", "rb") == NULL) printf("请您先保存文件信息"); { int cheak = 0; if (fread(info1, sizeof(struct info_s), count, P) == 1) cheak++; fclose(P); for (int i = 0; i < count; i++) { printf("学分为%d\n", info1[i].score); } } printf("请按任意键返回主菜单\n"); getch(); printf("\n\n"); }
时间: 2024-04-04 13:32:54 浏览: 125
在这段代码中,有几个问题需要注意:
1. 在打开文件时,应该将文件打开模式设置为"rb",表示以二进制方式读取文件内容。如果以文本方式读取,可能会出现读取到的数据和实际数据不一样的情况。
2. 在打开文件时,应该先检查文件是否打开成功,如果打开失败应该及时退出程序或进行错误处理。
3. 在读取文件时,应该根据实际数据的大小来指定读取的数据块大小。如果指定的数据块大小不正确,可能会出现读取到的数据和实际数据不一样的情况。
4. 在读取文件时,应该先检查读取的数据是否成功。如果读取失败,可能是因为文件已经读取完毕或者出现了其他错误。
下面是修改后的代码:
void read() {
struct info_s info1[N];
FILE *Q, *P;
int count;
Q = fopen("学科信息条数.txt", "rb");
if (Q == NULL) {
printf("无法打开文件\n");
return;
}
fscanf(Q, "%d", &count);
count = (int)count;
printf("%d", count);
fclose(Q);
P = fopen("infomation.txt", "rb");
if (P == NULL) {
printf("请您先保存文件信息\n");
return;
}
int cheak = 0;
if (fread(info1, sizeof(struct info_s), count, P) == count) {
cheak++;
}
fclose(P);
for (int i = 0; i < count; i++) {
printf("学分为%d\n", info1[i].score);
}
printf("请按任意键返回主菜单\n");
getch();
printf("\n\n");
}
注意,这里假设结构体info_s的大小为sizeof(struct info_s)。如果实际使用中结构体的大小不确定,应该先使用sizeof运算符计算出结构体的大小,然后再进行读取操作。
阅读全文