这是求语数外平均分及最高分最低分的函数,nodata和rtomain是我自己定义的函数,一个提示没有存入数据,一个返回主菜单。求解,怎么会提示段错误??
void analy()
{
struct Student *p=head;
float cmax,cmin,csum=0.0,emax=0.0,emin,esum=0.0,mmax,mmin,msum=0.0,cavg=0.0,mavg=0.0,eavg=0.0;
cmax=cmin=p->chinese;
mmax=mmin=p->math;
emax=emin=p->english;
if(p==NULL) nodata();
while(p!=NULL)
{
if(p->chinese>cmax) cmax=p->chinese;
if(p->chinese<cmin) cmin=p->chinese;
if(p->math>mmax) mmax=p->math;
if(p->math<mmin) mmin=p->math;
if(p->english>emax) emax=p->english;
if(p->english<emin) emin=p->english;
p=p->next;
csum+=p->chinese;
msum+=p->math;
esum+=p->english;
}
cavg=csum/number;
mavg=msum/number;
eavg=esum/number;
printf("语文最高分:%f 最低分:%f 平均分:%f ",cmax,cmin,cavg);
printf("数学最高分:%f 最低分:%f 平均分:%f ",mmax,mmin,mavg);
printf("英语最高分:%f 最低分:%f 平均分:%f ",emax,emin,eavg);
rtomain();
}
void analy()
{
struct Student *p=head;
float cmax,cmin,csum=0.0,emax=0.0,emin,esum=0.0,mmax,mmin,msum=0.0,cavg=0.0,mavg=0.0,eavg=0.0;
cmax=cmin=p->chinese;
mmax=mmin=p->math;
emax=emin=p->english;
if(p==NULL) nodata();
while(p!=NULL)
{
if(p->chinese>cmax) cmax=p->chinese;
if(p->chinese<cmin) cmin=p->chinese;
if(p->math>mmax) mmax=p->math;
if(p->math<mmin) mmin=p->math;
if(p->english>emax) emax=p->english;
if(p->english<emin) emin=p->english;
p=p->next;
csum+=p->chinese;
msum+=p->math;
esum+=p->english;
}
cavg=csum/number;
mavg=msum/number;
eavg=esum/number;
printf("语文最高分:%f 最低分:%f 平均分:%f ",cmax,cmin,cavg);
printf("数学最高分:%f 最低分:%f 平均分:%f ",mmax,mmin,mavg);
printf("英语最高分:%f 最低分:%f 平均分:%f ",emax,emin,eavg);
rtomain();
}