#include "stdio.h"
typedef struct node
{
int xh;
char sname[8];
int sx;
int yw;
int zf;
int mc;
struct node *next;
}linklist;
main()
{
linklist *head;
linklist *s=NULL; //创建 链表时所用的指针。。
linklist *p=NULL;// 输出 链表时所用的指针。。
linklist *q=NULL;
linklist *g=NULL;
char ch;
int i=1;
head = NULL;//开始时 链表的头为空;
printf(" 输入 y 进入循环\n");
ch=getch();
while(ch =='y'||ch=='Y')
{
s=(linklist*)malloc(sizeof(linklist));//给链表建立个空间
printf("输入学号");
scanf("%d",&s->xh);
printf("输入姓名");
scanf("%s",s->sname);
printf("输入数学成绩");
scanf("%d",&s->sx);
printf("输入语文成绩");
scanf("%d",&s->yw);
s->zf=s->sx+s->yw;
s->next = NULL;
if(head == NULL||head->zf<s->zf)
{
s->next=head;
head=s;
}
else
{
p=head;
q=p->next;
while(q!=NULL&&s->zf <= q->zf)
{
p=q;
q=q->next;
}
s->next=q;
p->next=s;
}
printf(" 继续输入按y\n");
ch=getch();
}
//输出链表
g=head;
while(g!=NULL)
{
s->mc=i;
i++;
printf("%4d",g->xh);
printf("%4s",g->sname);
printf("%4d",g->sx);
printf("%4d",g->yw);
printf("%4d",g->zf);
printf("%4d",g->mc);
printf("\n ");
g=g->next;
}
}
谢谢
感谢ING 我终于知道是哪里错了。。其实最主要的一点 就是g->mc=i; 我写错了 写成s->mc=i了。。其实只要改了这个就可以了。。呵呵。。谢谢了!!
追答还有就是你用getchar的话,他会识别你的回车的。所以。。。要注意这个问题。
本回答被提问者采纳