在按照某一成分对结构体进行排序时,其基本思路和数组排序一样,可以利用指针进行简化,也可以直接利用结构体名进行排序,如下实例,是利用平均分数对学生这一结构体进行排序的
1、定义结构体
struct student//定义结构体 { int num; char name[10]; int score[3]; float ave; }stu[5];
2、输入数据
int i,j,sum,t; FILE *fp; struct student p,temp,re[6]; for(i=0;i<5;i++)//结构体赋值 { printf("输入第%d条记录\n",i+1); scanf("%d,%s",&stu[i].num,stu[i].name); printf("请输入三门课成绩\n"); scanf("%d,%d,%d",&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]); sum=0; sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2]; stu[i].ave=sum/3.0; }
3、排序
for(i=0;i<4;i++)//文件排序 for(j=i+1;j<5;j++) if(stu[i].ave>stu[j].ave) { temp=stu[i]; stu[i]=stu[j]; stu[j]=temp; } if((fp=fopen("stu_sort.txt","w"))==NULL) { printf("cannot open stud.txt\n"); exit(0); } for(i=0;i<5;i++) fwrite(&stu[i],sizeof(struct student),1,fp); fclose(fp); if((fp=fopen("stu_sort.txt","r"))==NULL) { printf("cannot open stud.txt\n"); exit(0); } for(i=0;i<5;i++) { fread(&stu[i],sizeof(struct student),1,fp); printf("%d,%s,%d,%d,%d,%6.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].ave); } fclose(fp);