定义了结构体student,为什么这里排序之后只能显示出排名第一位的学生,而之后的学生无法显示

void pingjunpaixu()
{
FILE *fp,*fp1;
int i,j,k;
struct student z;//中间变量
fp=fopen("student.txt","r");
fp1=fopen("student1.txt","w");
for(i=0;fread(&student[i],sizeof(struct student),1,fp)!=0;i++)
{
k=i;
for(j=i+1;fread(&student[j],sizeof(struct student),1,fp)!=0;j++)
if(student[j].avage>student[k].avage)
k=j;
z=student[k];
student[k]=student[i];
student[i]=z;
fwrite(&student[i],sizeof(struct student),1,fp1);
}
fclose(fp1);
fclose(fp);
fp1=fopen("student1.txt","r");
for(i=0;fread(&student[i],sizeof(struct student),1,fp1)!=0;i++)
{
fread(&student[i],sizeof(struct student),1,fp1);
printf("排名:%5d\n名字:%5s,学号:%5s,班级:%5s,平均分:%5d\n",i+1,student[i].name,student[i].stunum,student[i].cla,student[i].avage);

}fclose(fp1);
printf("退出请输入0\n");
scanf("%d",&j); 

}

应该把读取学生到数组和排序的代码分开写,而且你排序的代码也没有写对。