c语言新手 要做学生管理系统,我创建了一个链表想输入代码中的信息,在主函数中输出第一个信息。

2025-04-23 12:43:45
推荐回答(1个)
回答1:

create开头部分

scanf("%s %d %s %d",&p->data.name,&p->data.age,&p->data.sex,&p->data.num);

这里p还没有分配内存。

所以野指针越界访问导致停止工作了。

你可以试试这样

struct node*creat()
{
struct node *head,*tail,*p;
head=tail=NULL;
do
{
p=(struct node *)malloc(sizeof(struct node));
p->next=NULL;
if(head==NULL)
head=tail=p;
else
{
tail->next=p;
tail=p;
}
printf(" 姓名1 年龄 性别 学号\n"); 
scanf("%s %d %s %d",&p->data.name,&p->data.age,&p->data.sex,&p->data.num);
}while(p->data.num!=0);

return (head);
}

不过 可以预见的是,最后会多一个节点出来。就是p->data.num=0那个。

最好再想办法删除