想问问我的文件保存(cunru)和文件提取函数(tiqu有什么问题,总是一用这两个函数程序就直接结束了,别的函数没有问题,应该如何进行更改,可以使程序正常运行。
```c
#include<stdio.h>
#include<string.h>
struct student
{
int num;
char name[21],sex[5];
int data[3];
float grade[3];
float ave,s;
int mingci,year,month,day;
};
void shuru(struct student stu[]);
void shuchu(struct student stu[]);
void jisuan(struct student stu[]);
void average(struct student stu[]);
void maxfen(struct student stu[]);
void shuchuu(struct student stu[],int i);
void cunru(struct student stu[]);
void tiqu(struct student stu[]);
int main()
{
struct student stu[10];
printf("\t\t|﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌STUDENTS﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌|\n");
printf("\t\t|\t1.输入学生的基本信息和三门成绩\t\t |\n");
printf("\t\t|\t2.输出学生的基本信息和三门成绩\t\t |\n");
printf("\t\t|\t3.求出每个学生三门课程的平均分\t\t |\n");
printf("\t\t|\t4.对十名学和按照平均分进行排队\t\t |\n");
printf("\t\t|\t5.输出每门课程成绩最高的同学的基本信息 \t |\n");
printf("\t\t|\t6.将数据保存到文件\t\t\t |\n");
printf("\t\t|\t7.将数据从文件读出\t\t\t |\n");
printf("\t\t|\t8.输入零退出此程序\t\t\t |\n");
printf("\t\t|﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌|\n");
int m;
do
{
printf("请输入一个选项:");
scanf("%d",&m);
switch(m)
{
case 1:printf("请输入学生数据:\n"); shuru(stu); printf("输入成功\n");break;
case 2:shuchu(stu); break;
case 3:jisuan(stu); break;
case 4:average(stu); break;
case 5:maxfen(stu); break;
case 6:cunru(stu); break;
case 7:tiqu(stu); break;
case 0:break;
default:break;
}
}while(m!=0);
printf("你已成功退出程序");
return 0;
}
void shuru(struct student stu[])
{
int i,j;
for(i=0;i<10;i++)
{
stu[i].s=0;
scanf("%d%s%s",&stu[i].num,&stu[i].name,&stu[i].sex);
scanf("%d%d%d",&stu[i].year,&stu[i].month,&stu[i].day);
for(j=0;j<3;j++)
{
scanf("%f",&stu[i].grade[j]);
stu[i].s+=stu[i].grade[j];
}
stu[i].ave=0;
stu[i].mingci=0;
}
}
void shuchu(struct student stu[])
{
printf("全部学生的基本信息为:\n");
int i,j;
printf("学号\t 姓名 性别 出生日期 C语言 高数 线代 总分 平均分 排名\n");
for(i=0;i<10;i++)
{
printf("%8d %-8s %3s ",stu[i].num,stu[i].name,stu[i].sex);
printf("%4d年%2d月%2d日 ",stu[i].year,stu[i].month,stu[i].day);
for(j=0;j<3;j++)
{
printf("%5.2f ",stu[i].grade[j]);
}
printf("%3.2f ",stu[i].s);
printf("%5.2f %3d\n",stu[i].ave,stu[i].mingci);
}
}
void jisuan(struct student stu[])
{
for(int i=0;i<10;i++)
stu[i].ave=stu[i].s/3;
printf("已完成平均分计算\n");
}
void average(struct student stu[])
{
int i,j;
for(i=0;i<9;i++)
for(j=0;j<9-i;j++)
if(stu[j].ave<stu[j+1].ave)
{
struct student ch=stu[j];
stu[j]=stu[j+1];
stu[j+1]=ch;
}
for(i=0;i<10;i++)
{
stu[i].mingci=i+1;
}
printf("已完成平均分排序\n");
}
void maxfen(struct student stu[])
{
printf("三科最高分分别为:\n");
printf("学号\t 姓名 性别 出生日期 C语言 高数 线代 总分 平均分 排名\n");
int i,j;float max;char ke[3][20]={"C语言","高数","线代"};
for(j=0;j<3;j++)
{
max=0;
for(i=0;i<10;i++)
if(stu[i].grade[j]>max)
{
max=stu[i].grade[j];
}
printf("%s成绩最高的为:\n",ke[j]);
for(int l=0;l<10;l++)
if(stu[l].grade[j]==max)
shuchuu(stu,l);
}
}
void shuchuu(struct student stu[],int i)
{
int j;
{
printf("%8d %-8s %3s ",stu[i].num,stu[i].name,stu[i].sex);
printf("%4d年%2d月%2d日 ",stu[i].year,stu[i].month,stu[i].day);
for(j=0;j<3;j++)
{
printf("%5.2f ",stu[i].grade[j]);
}
printf("%3.2f ",stu[i].s);
printf("%5.2f %3d\n",stu[i].ave,stu[i].mingci);
}
}
void cunru(struct student stu[])
{
FILE *fp; int i;
fp=fopen("D:\\STDU","w");
if(fp==NULL)
{
printf("没有该文件\n");
exit(0);
}
for(i=0;i<10;i++)
fwrite(&stu[i],sizeof(struct student),10,fp);
fclose(fp);
printf("已成功输入文件\n");
}
void tiqu(struct student stu[])
{
FILE *fp; int i;
fp=fopen("D:\\STDU","r");
if(fp==NULL)
{
printf("没有该文件\n");
exit(0);
}
for(i=0;i<10;i++)
fread(&stu[i],sizeof(struct student),10,fp);
fclose(fp);
printf("已成功读取文件\n");
}
```