为什么用C输入三个数据就出错?在线求教
/*学生基本情况录入*/struct student * record()
{
FILE * fp;
struct tm * ptm;
long ts;
int y;
int ar;
struct student *p8,/*p10,*/*p7,*p11;
p8=p7=(struct student *)malloc(sizeof(struct student));
(*p7).next=NULL;
(*p8).next=NULL;
/* p10=*/p11=p8;
if((fp=fopen("stu_list","wb"))==NULL)
{
printf("文件打开失败\n");
}
// printf("请输入学生的学号:\n");
//fflush(stdin);
//scanf("%s",p8->num);printf("%s",p8->num);
printf("1继续0放弃");scanf("%d",&ar);
while(ar)
{
p8->sex=0;
printf("请输入学生的学号:\n");
fflush(stdin);
scanf("%s",p8->num);printf("%s",p8->num);
printf("请输入学生的姓:\n");
scanf("%s",p8->lname);
printf("请输入学生的名:\n");
scanf("%s",p8->fname);
do
{
printf("请输入学生的性别:\n");
scanf("%d",&p8->sex);
}
while(p8->sex!=1&&p8->sex!=0);
do
{
printf("请输入学生的出生年份:\n");
scanf("%d",&p8->byear);
ts=time(NULL);
ptm=localtime(&ts);
y=ptm->tm_year+1900;
}
while(p8->byear>y);
printf("请输入学生的出生月份:\n");
scanf("%d",&p8->bmonth);
printf("请输入学生的日期:\n");
scanf("%d",&p8->bday);
printf("请输入学生的外语成绩:\n");
scanf("%f",&p8->score[0] );
printf("请输入学生的高数成绩:\n");
scanf("%f",&p8->score[1] );
printf("请输入学生的C语言成绩:\n");
scanf("%f",&p8->score[2] );
printf("请输入学生的马哲成绩:\n");
scanf("%f",&p8->score[3] );
p8->aver=average(p8);
p8->sum=addtion(p8);
if(fwrite(p8,sizeof(struct student),1,fp)!=1)
{ printf("文件写入出错!\n");}
//(*p8).next=NULL;
p7=p8->next;
p8=p7;
//p10=p8;
p8=(struct student *)malloc(sizeof(struct student));//(*p8).next=NULL;
// printf("你确定继续要插入学生基本情况吗?1确定0放弃\n");
//fflush(stdin);
//scanf("%c",&ar);
//printf("请输入学生的学号:\n");
//fflush(stdin);
//scanf("%s",p8->num);printf("%s",p8->num);
printf("1继续0放弃");scanf("%d",&ar);
}
fclose(fp);
free(p7);
p8=NULL;
fp=fopen("stu_list","rb");
while(flag)
{
fread(p11,sizeof(struct student),1,fp);
printf("学号 姓名 性别 出生年月日 外语 高数 C语言 马哲\n");
printf("%s %s%s %d %d-%d-%d %f %f %f %f\n",(*p11).num,(*p11).lname,(*p11).fname,(*p11).sex,(*p11).byear,(*p11).bmonth,(*p11).bday,(*p11).score[0],(*p11).score[1],(*p11).score[2],(*p11).score[3]);
p11=(*p11).next;
if(p11==NULL)flag=0;
}
fclose(fp);
flag=1;
/* if((fp=fopen("stu_list","wb"))==NULL)
{
printf("文件打开失败\n");
}
while(p10!=NULL)
{
if(fwrite(p10,sizeof(struct student),1,fp)!=1)
{ printf("文件写入出错!\n");}
/* (*p8).next=NULL;
p10=p10->next;
}
fclose(fp);*/
return(p11);
}