#include"stdio.h"
#include"stdlib.h"
#define LEN sizeof(struct Student)
struct Student
{
long num;
char name[20];
char sex[5];
int old;
struct Student *next;
};
int n;
struct Student *creat(void)
{
struct Student *head,*p1,*p2;
p1=p2=(struct Student *)malloc(LEN);
printf("输入学生的信息(学号(学号为零就结束),姓名,性别(man or woman),年龄):");
scanf("%ld,%s,%s,%d",&p1->num,p1->name,p1->sex,&p1->old);
head=NULL;
while(p1->num!=0)
{
n++;
if(n==1)head=p1;
else p2->next=p1;
p2=p1;
p1=malloc(LEN);
printf("输入学生的信息(学号,姓名,性别(man or woman),年龄):");
scanf("%ld,%s,%s,%d",&p1->num,p1->name,p1->sex,&p1->old);
}
p2->next=NULL;
return head;
}
struct Student *del(struct Student *head,int old)
{
struct Student *p1,*p2;
int i=1;
p1=head;
if(head==NULL)
{
printf("\nlist null!\n");goto end;
}
while(i==1)
{
while(old!=p1->old&&p1->next!=NULL)
{
p2=p1;p1=p1->next;
}
if(old==p1->old)
{
if(p1==head)head=p1->next;
else p2->next=p1->next;
i=1;
}
else {printf("%d not been found!\n",old);i=0;}
}
return head;
}
void print(struct Student *head)
{
struct Student *p;
printf("\nnow these %d records are:\n",n);
p=head;
if(head!=NULL)
do
{
printf("%ld,%s,%s,%d",p1->num,p1->name,p1->sex,p1->old);
p=p->next;
}while(p!=NULL);
}
int main(void)
{
int old;
struct Student *head;
head=creat();
printf("输入一个年龄:");
scanf("%d",&old);
head=del(head,old);
print(head);
return 0;
}
以上是楼主的程序,红色加粗部分有问题,可按如下修改:
1、第一处红色加粗部分p1=malloc(LEN)改为"p1=(struct Student *)malloc(LEN);"。因为malloc()函数默认返回的是一个(void *)指针,而p1是(struct Student *)指针,二者类型不同,不能直接赋值;
2、第二处红色加粗部分中的"p1"在该"print"函数中并未定义。
这是楼主程序中还存在的2个语法错误,改掉就可以编译成功了,至于逻辑上有没有错误,楼主自己调试看一下。