通迅录中无法删除条目!

来源:百度知道 编辑:UC知道 时间:2024/05/26 03:32:05
代码如下,在输入名字之后,就出现错误了!
//删除信息
void Removeitem()
{
char findname[20]; //先查找 后删除
TEL *p = head->next, *pr = head->next;
printf("请输入要删除的姓名:\n");
scanf(" %s",findname);
if (head->next == NULL)
{
printf("无节点!\n");
return;
}
while ((strcmp(p->name,findname)!=0 )&&p->next != NULL)
{
pr =p;
p =p->next;
}
if (strcmp(findname, p->name)==0) //输出删除信息
{
printf("%s\t%s\t%s\t%s\n",p->next->name,p->next->addrass,p->next->zip,p->next->telephone);
if (p == head->next)
head->next = p->next;
else
pr->next = p->next;
free(p);
}
具体问题就是无法删除最后一条记录,上面的都可以,请大家帮忙找找!

printf("%s\t%s\t%s\t%s\n",p->next->name,p->next->addrass,p->next->zip,p->next->telephone);
最后一条记录没有next吧

加一个判断,若删除的是头指针,则将头指针的next的值赋给头指针;若删除的是中间的,则将它前一个的next指向它的next;若删除的是最后的,则将它前一个的next=NULL