#include<stdio.h> #include<stdlib.h> #define N 3 struct student_type //结构体数组 { char name[10]; int num; double ave; double score[3]; } stud[N],s; int main() { FILE *fp,*fp1; int i,j,t,n; printf("\nNO.:"); scanf("s",s.num); printf("name:"); scanf("%s",s.name); printf("scorel,score2,score3:"); scanf ("%d,%d,%d",&s.score[0], &s.score[1],&s.score[2]); s.ave=(s.score[0]+s.score[1]+s.score [2])/3.0; //从文件读数据 if((fp=fopen("stud_sort","r"))==NULL) { printf("can not open file."); exit(0) ; } printf("original data: \n"); for (i=0;fread(&stud[i],sizeof(struct student_type),1,fp)!=0;i++) { printf("\n%8s%8s",stud[i].num,stud[i].name); for (j=0;j<3;j++) { printf("%8d",stud[i].score[j]); printf("810.2f",stud[i].ave); } n=i; for (t=0;stud[t].ave>s.ave && t<n;t++); //向文件写数据 printf("\nNow:\n"); fp1=fopen("sort1.dat","w"); for (i=0;i<t;i++) { fwrite(&stud[i],sizeof(struct student_type),1,fp1); printf("\n %8s%8s",stud[i].num,stud[i].name) ; for (j=0;j<3;j++) printf("%8d",stud[i].score[j]); printf("%10.2f",stud[i].ave); } fwrite(&s,sizeof(struct student_type),1,fp1); printf("\n %8s %7s %7d %7d %7d %10.2f",s.num,s.name,s.score[0],s.score[1],s.score[2],s.ave); for (i=t;i<n;i++) { fwrite(&stud[i],sizeof(struct student_type),1,fp1); printf("\n %8s%8s",stud[i].num,stud[i].name); for(j=0;j<3;j++) printf("%d",stud[i].score[j]); printf("%10.2lf",stud[i].ave); } printf("\n"); fclose(fp); fclose(fp1); } return 0; }优化一下这个代码
时间: 2024-01-24 07:02:05 浏览: 135
这是一个学生信息排序的代码,下面是我对其进行的优化建议:
1. 定义常量
可以在代码开头定义常量来提高代码的可读性和可维护性,例如:
```c
#define N 3 // 学生数量
#define MAX_NAME_LEN 10 // 姓名最大长度
#define MAX_SCORE 100 // 成绩最大值
#define FILENAME "stud_sort" // 文件名
```
2. 使用函数
可以将一些功能相近的代码封装成函数来提高代码的可读性和可维护性,例如封装一个函数来打印学生信息:
```c
void print_student(struct student_type s) {
printf("%8s%8s", s.num, s.name);
for (int j = 0; j < 3; j++) {
printf("%8d", s.score[j]);
}
printf("%10.2f", s.ave);
}
```
3. 错误处理
在代码中需要进行错误处理,例如当文件打开失败时应该及时退出程序并提示错误信息,可以使用 `perror()` 函数来输出错误信息:
```c
fp = fopen(FILENAME, "r");
if (fp == NULL) {
perror("Can not open file");
exit(EXIT_FAILURE);
}
```
4. 变量命名
变量命名应该尽量清晰易懂,例如 `t` 变量的作用不够明确,可以改为 `insert_pos` 来表示插入位置。
5. 注释
代码中应该添加注释,以便他人易于理解和维护代码。
最终优化后的代码如下:
阅读全文