请教一个链表的问题
我用链表做了一个学生成绩管理系统,可是给学生成绩排序部分如果调用print函数(该函数是显示学生成绩的函数)就会不对,以下是排序部分的程序(第一个是正确的,第二个是错误的),我不指点为什么用第一种会错,望各位高手指点。谢谢!//程序1
void sort(STUDENT *h)
{
int i=0,j;
STUDENT *t, *p, *q, *r, *s;
t=p=(STUDENT *)malloc(LEN);
p->next=h;
printf("请输入按哪门课程的编号来排序:(0.语文 1.英语 2.数学)\n");
scanf("%d",&j);
while (p->next!=NULL)
{
r=p;
q=p->next;
while(q->next!=NULL)
{
if(q->next->score[j] > r->next->score[j]) //按从大到小的顺序排
r=q;
q=q->next;
}
if(r!=p)
{
s=r->next;
r->next=s->next;
s->next=p->next;
p->next=s;
}
p=p->next;
}
h=t->next;
free (t);
p=h;
while(p!=NULL)
{
i++;
p->order=i;
p=p->next;
}
print(h);
printf("排序成功!!!\n");
}
//程序2
STUDENT *sort(STUDENT *h)
{
int i=0,j;
STUDENT *t, *p, *q, *r, *s;
t=p=(STUDENT *)malloc(LEN);
p->next=h;
printf("请输入按哪门课程的编号来排序:(0.语文 1.英语 2.数学)\n");
scanf("%d",&j);
while (p->next!=NULL)
{
r=p;
q=p->next;
while(q->next!=NULL)
{
if(q->next->score[j] > r->next->score[j]) //按从大到小的顺序排
r=q;
q=q->next;
}
if(r!=p)
{
s=r->next;
r->next=s->next;
s->next=p->next;
p->next=s;
}
p=p->next;
}
h=t->next;
free (t);
p=h;
while(p!=NULL)
{
i++;
p->order=i;
p=p->next;
}
printf("排序成功!!!\n");
return h;
}
第二种方法是排完之后先不显示成绩,待按显示成绩的键后再显示。