为什么使用以下代码输出结果不能长时间显示,如何修改:int duqu(struct student *list) { int n = 0; FILE *fp = fopen("C:\Users\dell\Desktop\软件设计-源文件\A3\note.txt", "r"); if (fp == NULL) { printf("无法打开文件"); return n; } fscanf(fp, "%d", &n); printf("学号 平时成绩 期中成绩 期末成绩 \n"); for (int i = 0; i < n; i++) { fscanf(fp, "%s %f %f %f", list[i].code, &list[i].s1, &list[i].s2, &list[i].s3); printf("\t %s %5.1lf %5.1lf %5.1lf \n", list[i].code, list[i].s1, list[i].s2, list[i].s3); } printf("\n\n\n ****** 读取文件成功!摁任意键继续! ****** \n"); fclose(fp); return n; }
时间: 2024-03-17 22:39:40 浏览: 65
这段代码的问题在于使用了阻塞式输入函数scanf,当读取到文件结束时,程序会一直等待用户输入,导致程序长时间无响应。为了解决这个问题,可以使用非阻塞式输入函数fgets来读取文件,然后使用sscanf来解析读取到的字符串。
修改后的代码如下:
```
int duqu(struct student *list) {
int n = 0;
FILE *fp = fopen("C:\\Users\\dell\\Desktop\\软件设计-源文件\\A3\\note.txt", "r");
if (fp == NULL) {
printf("无法打开文件");
return n;
}
char line[100];
fgets(line, 100, fp);
sscanf(line, "%d", &n);
printf("学号 平时成绩 期中成绩 期末成绩 \n");
for (int i = 0; i < n; i++) {
fgets(line, 100, fp);
sscanf(line, "%s %f %f %f", list[i].code, &list[i].s1, &list[i].s2, &list[i].s3);
printf("\t %s %5.1lf %5.1lf %5.1lf \n", list[i].code, list[i].s1, list[i].s2, list[i].s3);
}
printf("\n\n\n ****** 读取文件成功!摁任意键继续! ****** \n");
fclose(fp);
return n;
}
```
这样修改后,程序就能正常读取文件并显示结果,不会长时间卡住了。
阅读全文