当我先进行case 1总分排序后,返回选择case 2单科排序时(或者先case 1再case 2)
为什么得不到单科排序的效果?(就好像排序函数时而可用时而不可用)
void main()
{
struct person *head,*head1;
int i,input=1;
printf(" Please input the date\n\n");
head=scan();
system("cls");
while(input==1)
{
printf(" Menu \n");
printf(" 1.计算总成绩并排名 \n");
printf("\n\n 2.单科成绩排名 \n\n");
printf("input decision:\n");
scanf("%d",&i);
system("cls");
switch(i)
{
case 1:print(sortsum(head));break;
case 2:print1(sortsubject(head));break;
default:;
}
printf(" 1.返回; \n");
printf(" 2.结束; \n");
printf("input decision:\n");
scanf("%d",&input);
system("cls");
}
}
struct person *sortsum(struct person *head)
{
struct person *p,*p1;
struct Date temp;
p=head;
while(p!=NULL)
{
p->Date.sum=0;
for(i=0;i<2;i++)
{
p->Date.sum+=p->Date.score[i];
}
p=p->next;
}
p=head;
while(p!=NULL)
{
p1=p->next;
while(p1!=NULL)
{
if(p->Date.sum<p1->Date.sum)temp=p->Date,p->Date=p1->Date,p1->Date=temp;
p1=p1->next;
}
p=p->next;
}
return (head);
}
那为什么总分排序时使用这种方式又可以达到效果呢?
追答你看一下你的运行结果,字符串name,就知道了,始终是原有顺序,没有任何交换。
追问已解决了,问题在score[]我越界了,谢谢大神>o<
追答好的
本回答被网友采纳