求大神帮忙看看为什么这个程序运行到一半就停止运行了
求大神帮忙看看为什么这个程序运行到一半就停止运行了#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE 2 /*定义常量SIZE便于以后的修改*/
struct student /*定义一个结构体数组存放学生的信息*/
{
int number[20]; /*学号*/
char name[30];/*姓名*/
int age[20];/*年龄*/
char sex[20];/*性别*/
int bday[20];/*生日*/
char address[30];/*住址*/
int tel[22];/*电话*/
char email[30];/*邮箱*/
}stu[SIZE];
void menu();/*调用菜单函数*/
void write();/*读入信息*/
void save(int x);/*保存stud.dat文件函数*/
void SaveOneStudent(int i);/*保存一个学生信息*/
void SaveAllStudent(int n);/*保存全部学生信息*/
void inturn (struct student c[]);/*用于对学生的信息按学号排序的函数*/
void save2();/*将排序后的信息存入student.dat文件中*/
int AddStudent(int n);/*增加学生信息*/
void InputOnestudent(int i);/*输入一个同学信息*/
int DelStudent(int n);/*删除学生信息*/
void ModifyStudent(int n);/*修改学生信息*/
void OutputOneStudent(int i);/*查询一个学生信息*/
void SearchMenu(int n);/*查询学生信息操作*/
void SearchNumber(int n);/*按学号查询学生信息*/
void read();/*读取student.dat文件文件中学生的信息*/
void menu()
{
printf("********************************请输入所需操作*******************************\n");/*选择功能菜单*/
printf("*****************************************************************************\n");
printf("****************************1.学生成绩写入及排序****************************\n");
printf("****************************2.增加学生信息**********************************\n");
printf("****************************3.删除学生信息**********************************\n");
printf("****************************4.修改学生信息**********************************\n");
printf("****************************5.查询学生信息**********************************\n");
printf("****************************0.退出系统**************************************\n");
printf("**********************************************************\n");
}
void save(int x)//写入文件
{
FILE *fp;/*定义文件指针用于向文件读入数据*/
int i;
if((fp=fopen("student.dat","rb+"))==NULL)/*以二进制读,写方式打开文件*/
{
printf("cannot open file\n");
exit(1);
}
for(i=0;i<SIZE;i++)
if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
printf("file write error\n");
fclose(fp);
printf("\n信息保存成功!恭喜!!\n");
}
void SaveOneStudent(int i)//保存一个学生的信息
{
FILE *fp;
if((fp=fopen("student.dat","rb+"))==NULL)/*以二进制读,写方式打开文件*/
{
printf("文件打开失败!\n");
exit(1);
}
fseek(fp,i,0);/*文件指针定位到第i个学生*/
fwrite(&stu[i],sizeof(struct student),1,fp);/*将第i个学生信息写入文件*/
fclose(fp);
}
void SaveAllStudent(int n)/*保存全部学生信息*/
{
FILE *fp;
if((fp=fopen("student.dat","wb"))==NULL)/*以二进制写方式打开文件*/
{
printf("文件打开失败!\n");
exit(1);
}
fwrite(stu,sizeof(struct student),n,fp);/*将数组stu中全部学生信息写入文件*/
fclose(fp);
}
void write()
{
int i;/*计数变量*/
for(i=0;i<SIZE;i++)
{
printf("学号:");
scanf("%d",&stu[i].number);
printf("姓名:");
scanf("%s",&stu[i].name[10]);
printf("年龄:");
scanf("%d",&stu[i].age);
printf("性别:");
scanf("%s",&stu[i].sex[2]);
printf("生日:");
scanf("%s",&stu[i].bday);
printf("住址:");
scanf("%s",&stu[i].address[10]);
printf("电话:");
scanf("%d",&stu[i].tel);
printf("邮箱:");
scanf("%s",&stu[i].email[20]);
}
}
void inturn(struct student m[])//按学号排序
{
int i,j;/*计数变量*/
struct student temp;/*中间变量 类型为结构体*/
for(i=0;i<SIZE-1;i++) /*运用冒泡排序对结构体数组进行排序*/
for (j=i+1;j<SIZE-i-1;j++)
{
if(m[i].number>m[j].number)
{
temp=m[i];
m[i]=m[j];
m[j]=temp;
}
}
printf("\n排序后的学生信息:\n\n");
for (i=0;i<SIZE;i++)
{
printf("学号%d\t姓名%s\t年龄%d\t性别%s\t生日%d\t住址%s\t电话%d\t邮箱%s\t\n\n",i+1,stu[i].number,stu[i].name[10],stu[i].age,stu[i].sex[2],stu[i].bday,stu[i].address[10],stu[i].tel,stu[i].email[20]);
}/*输出排序后的学生信息*/
}
void save2()//将排序后的学生信息保存
{
FILE *fp;
int i;
if((fp=fopen("stud.dat","rb+"))==NULL)/*以二进制读,写方式打开文件*/
{
printf("文件打开失败!\n");
exit(1);
}
for (i=0;i<SIZE;i++)
if (fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
printf("file write error\n");
fclose(fp);/*读取完毕关闭文件*/
}
int AddStudent(int n)//增加学生信息
{
char c='y';
FILE *fp;
if((fp=fopen("student.dat","ab"))==NULL)/*以二进制追加方式打开文件*/
{
printf("文件打开失败!\n");
exit(1);
}
while(c=='y')
{
printf("\n请输入要增加的同学的信息:");
InputOnestudent(n);/*调用函数输入第n个学生信息*/
fwrite(&stu[n],sizeof(struct student),1,fp);/*将第n个学生信息保存至文件*/
n++;/*学生数量增加1*/
printf("\n继续输入其他同学信息吗?\n");
printf("确定进行删除请按y;不进行删除请按n\n");
c=getchar();
getchar();
}/*结束while*/
printf("\n按任意键继续!\n");
getchar();
fclose(fp);
return(n);
}
void InputOnestudent(int i)//输入一个学生的信息
{
printf("学号\t姓名\t年龄\t性别\t生日\t住址\t电话\t邮箱\n");
scanf("%d\t%s\t%d\t%s\t%d\t%s\t%d\t%s\t\n",&stu[i].number,stu[i].name[10],stu[i].age,&stu[i].sex[2],&stu[i].bday,&stu[i].address[10],&stu[i].tel,&stu[i].email[20]);
}
int DelStudent(int n)//删除学生信息
{
int i,k=-1,x;
char c1='y',c2;
while(c1=='y')
{
c2='n';
printf("\n请输入要删除的同学的学号:");
scanf("%d",&x);
for(i=0;i<n;i++)
if(x==stu[i].number)
{
k=i;/*找到要删除的同学学号,并用k记下其下标*/
break;
}
if(k<0)/*k<0表示在数组中没有找到输入学号对应的学生*/
printf("\n输入学号有误,请重新输入!");
else
{
printf("\n该同学信息如下:\n");
InputOnestudent(k);
printf("\n确定删除?\n");
printf("确定进行删除请按y;不进行删除请按n\n");
c2=getchar();
getchar();
if(c2=='y')/*c2为y,表示确定进行删除操作*/
{
for(i=k;i<n;i++)
stu[i]=stu[i+1];/*删除第k个学生信息*/
n--;/*学生人数减1*/
printf("删除成功!恭喜!!\n");
}
else
printf("\n取消删除!\n");
printf("\n继续删除操作吗?");
printf("\n继续删除请按y;不进行删除请按n\n");
c1=getchar();
getchar();
}
}/*结束while*/
save(n);
printf("\n按任意键继续!\n");
getchar();
return(n);
}
void ModifyStudent(int n)//修改学生信息
{
struct student temp;
int k=-1,x,i;
char c1='y',c2;
while(c1=='y')
{
c2='y';
printf("\n请输入要修改的同学的学号:");
scanf("%d",&x);
for(i=0;i<n;i++)
if(x==stu[i].number)
{
k=i;/*找到要修改的同学学号,并用k记下其下标*/
break;
}
if(k<0)/*k<0表示在数组中没有找到输入学号对应的学生*/
printf("\n输入学号有误,请重新输入!");
else
{
printf("请输入要修改学生修改后的的信息\n");
printf("学号\t姓名\t年龄\t性别\t生日\t住址\t电话\t邮箱\t\n");
scanf("%d\t%s\t%d\t%s\t%d\t%s\t%d\t%s\t\n",&temp.number,stu[i].name[10],&temp.age,&temp.sex[2],&temp.bday,&temp.address[10],&temp.tel,&temp.email[20]);
stu[k]=temp;/*修改该学生信息*/
printf("\n修改成功!恭喜!!\n");
break;
}
SaveAllStudent(k);/*保存修改后的学生信息*/
printf("\n继续修改操作吗?");
printf("\n继续修改请按y;不进行修改请按n\n");
c1=getchar();
getchar();
}/*结束while*/
printf("\n按任意键继续!\n");
getchar();
}
void OutputOneStudent(int i)//输出一个学生信息
{
printf("学号%d\t姓名%s\t年龄%d\t性别%s\t生日%d\t住址%s\t电话%d\t邮箱%s\t\n\n",i+1,stu[i].number,stu[i].name[10],stu[i].age,stu[i].sex[2],stu[i].bday,stu[i].address[10],stu[i].tel,stu[i].email[20]);
}
void SearchNumber(int n)
{
int i,j,k,x;
char c='y';
while(c=='y')
{
k=-1;
printf("\n请输入学生学号:");
scanf("%d",&x);
for(i=0,j=1;i<n;i++)
if(stu[i].number==x)
{
k=i;/*找到要查询的同学学号,并用k记下其下标*/
printf("学号%d\t姓名%s\t年龄%d\t性别%s\t生日%d\t住址%s\t电话%d\t邮箱%s\t\n\n",stu[k].number,stu[k].name[10],stu[k].age,stu[k].sex[2],stu[k].bday,stu[k].address[10],stu[k].tel,stu[k].email[20]);
printf("\n按任意键继续!\n");
getchar();
}
printf("继续查询其他学生信息吗?");
printf("\n继续修改请按y;不进行修改请按n\n");
c=getchar();
getchar();
}/*结束while*/
printf("\n按任意键继续!\n");
getchar();
}
void SearchMenu(int n)
{
printf("**********************************************************\n");
printf("******************** 欢迎进入查询系统 *******************\n");
printf("**********************************************************\n");
SearchNumber(n);
}
int main()
{
int n=SIZE;
int choice;/*用户选择变量*/
printf("*******************************************************************************\n");
printf("* *\n");
printf("* &学生基本信息管理& *\n");
printf("* *\n");
printf("*******************************************************************************\n\n\n");
printf("******************************●●欢迎使用●●*********************************");
while(1)
{
menu();/*调用菜单函数形成操作界面*/
printf("请选择:");
scanf("%d", &choice);
if ( choice==0 )
{
printf("\t\t\t\t谢谢使用!!!");
break;
}
switch(choice) /*多重选择实现功能不同的功能*/
{
case 1:write();inturn(stu);save(SIZE);save2;break;
case 2:AddStudent(n);break;
case 3:DelStudent(n);break;
case 4:ModifyStudent(n);break;
case 5:SearchMenu(n);break;
case 0:printf("\n谢谢使用!再见!\n");
default:
printf("\n按键错误!请重新选择!\n");
}/*结束switch*/
}}/*结束while*/