c语言链表排序排名问题 下面的程序尽量不要改动。若改动少些改动 并标出改动的地方在哪里

#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;

}

}
谢谢

第1个回答  2011-12-07
#include "stdio.h"
#include <memory> //here

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\n"); //here
ch = getchar(); //here
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\n"); //here
ch = getchar();
if(ch != 'y' | ch != 'Y' | ch != 'n' | ch != 'N')
{
ch = getchar();
}
if(ch == 'n' | ch == 'N')
{
break;
}
}
//输出链表
g=head;

while(g!=NULL)
{
g->mc=i; //here
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;

}
return; //here
}
我标记here的地方就是修改了的地方,你可以先看看。不知道为什么的追问。我不想一个地方一个地方的解释了。。。。捏追问

感谢ING 我终于知道是哪里错了。。其实最主要的一点 就是g->mc=i; 我写错了 写成s->mc=i了。。其实只要改了这个就可以了。。呵呵。。谢谢了!!

追答

还有就是你用getchar的话,他会识别你的回车的。所以。。。要注意这个问题。

本回答被提问者采纳
相似回答