结构体链表问题
typedef struct record{
char name[15];
char tel[15];
char address[50];
};
typedef struct node
{
struct record data;
struct node *next;
}Node;
void insert(Node*l)
{
Node*p=NULL;
Node*r=l->next;
char ch=0;
char name[15],tel[15],adr[50];
while(1)
{
printf("输入姓名:");
fgets(name,15,stdin);
rewind(stdin);
DelN(name);
printf("输入电话号码:");
fgets(tel,15,stdin);
rewind(stdin);
DelN(tel);
printf("输入地址:");
fgets(adr,50,stdin);
rewind(stdin);
DelN(adr);
p=(Node*)malloc(sizeof(Node));
if(!p)
{
printf("内存申请失败!\n");
return;
}
strcpy(p->data.name,name);
strcpy(p->data.tel,tel);
strcpy(p->data.address,adr);
if(CheckData(p,l)==0) ?这里把l结构体赐给CheckData函数了 问题2
{
free(p);
printf("已有该记录,请按任意键后重新输入!");
getchar();
continue;
}
p->next=r;
l->next=p;
r=p;
printf("是否继续输入?是Y,否N:");
scanf("%c",&ch);
rewind(stdin);
if(ch=='N'||ch=='n')
break;
}
}
int CheckData(Node*p,Node*l)
{
Node*r=l->next;?这里结构体指针r所指向的应该是个空链表NULL 问题3
int result;
while(r)?可是这个地方r为真,表示r保存的不是空链表 问题4
{
if ((strcmp(r->data.name,p->data.name)==0)
&&(strcmp(r->data.tel,p->data.tel)==0)
&&(strcmp(r->data.address,p->data.address)==0))
{
result=0;
break;
}
r=r->next;
result=1;
}
return result;
}
int main()
{
Node*l;
l=(Node*)malloc(sizeof(Node));
if (l==NULL)
{
printf("为节点申请内存失败!");
return 1;
}
l->next=NULL; ?这里l->next保存的是NULL表示没有链表了 问题1
while(1)
{
switch(menu2())
{
case 1:
insert(l);
break;
case 7:
printf("程序结束\n");
exit(0); }
}
return 0;
}
此程序不是完整程序本人只是把有问题的代码发出来的
l->next其他代码都没有用链表和结构体
l->next一直都是NULL怎么到了后面就不是NULL了