C语言链表问题,这是我写的程序,检查没有语法错误,但是运行不了,高手救命啊!!

2025-01-08 07:34:55
推荐回答(1个)
回答1:

第一,你的head并没有赋值,head永远都不会为NULL,你这个if显然有点多余。第二,你在建链表的时候p结点显然是有放值的,不应该把它free掉。第三,你的tail一开始没有分配空间,也就没有tail->next。我下面给出修改后的部分:
struct chain *create()
{
struct chain *head,*tail,*p;
tail=(struct chain *)malloc(sizeof (struct chain));
while(1)
{
p=(struct chain *)malloc(sizeof (struct chain));
printf("请输入学号(学号为0时输入停止):");
scanf("%s",p->Number);
if(!strcmp(p->Number,"0"))
break;
printf("请输入姓名:");
scanf("%s",p->Name);
printf("请输入成绩:");
scanf("%d",&p->Mark); //以上放值p结点的值域。
head=p; //保存头结点指针。
p->next=NULL; //将p结点的链域设为空。
tail->next=p; //将尾结点的链域设为p,连到p结点。
tail=p; //将p当成尾结点。
}
return head;
}
至于你后面的程序我没看过,要帮忙看的话可以追问。