关于C的链表的,高手进!!!

来源:百度知道 编辑:UC知道 时间:2024/06/27 14:57:00
高手帮我看下程序,显示时只出第一个人的资料,之后内存错误,我觉得好像链表根本没建好。

程序要求:
建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删除。

#include<stdio.h>
#include<malloc.h>
struct student
{
long num;
char name[20];
char sex;
int age;
struct student *next;
} *stu;
struct student *jianli_shuru()
{
struct student *p1,*p2,*head;
char a;
int i=1;
p1=p2=(struct student*)malloc(sizeof(struct student));
head=p1;
p1->num=0;
while(2)
{
printf("\n第%d个同学\n",i);
i++;
printf("输入学号\n");
scanf("%ld",&p1->num);
if(p1->num==-1)
break;
printf("输入姓名\n");
scanf("%s",p1->name);
printf("输入性别\n");
scanf("%c",&a);
scanf("%c",&p1->sex);
printf("输入年龄\n");
scanf(&

xianshi()函数有错误;

#include<stdio.h>
#include<malloc.h>
struct student
{
long num;
char name[20];
char sex;
int age;
struct student *next;
} *stu;
struct student *jianli_shuru()
{
struct student *p1,*p2,*head;
char a;
int i=1;
p1=p2=(struct student*)malloc(sizeof(struct student));
head=p1;
p1->num=0;
while(2)
{
printf("\n第%d个同学\n",i);
i++;
printf("输入学号\n");
scanf("%ld",&p1->num);
if(p1->num==-1)
break;
printf("输入姓名\n");
scanf("%s",p1->name);
printf("输入性别\n");
scanf("%c",&a);
scanf("%c",&p1->sex);
printf("输入年龄\n");
scanf("%d",&p1->age);
p2=p1;
p1=(struct student*)malloc(sizeof(struct student));
p2->next=p1;
}
free(p1);//跳出后p1多开辟了一块空间
p