优化此程序段:int duqu(struct student *list) { int n; int i=0; FILE *fp; fp=fopen("C:\\Users\\dell\\Desktop\\软件设计-源文件","r"); fscanf(fp,"%d",&n); for(i=0;i<n;i++) { fscanf(fp,"%s %f %f %f",list[i].code,&list[i].s1,&list[i].s2,&list[i].s3); } printf("学号 平时成绩 期中成绩 期末成绩 \n"); for(i=0;i<n;i++) 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"); getch(); fclose(fp); return n; }
时间: 2024-04-06 14:33:14 浏览: 20
优化后的程序如下:
int duqu(struct student *list) {
int n = 0;
FILE *fp = fopen("C:\\Users\\dell\\Desktop\\软件设计-源文件", "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;
}
优化的主要点有:
1. 声明变量时可以直接初始化,避免多余的赋值操作;
2. 在打开文件前先检查文件是否成功打开,避免程序崩溃;
3. 将循环内的 printf 提前到循环外,可以减少重复的输出操作;
4. 将循环中的变量 i 声明在循环内部,避免在函数作用域内污染命名空间。