当链表里有三本书的数据时,删除第二个会显示找不到该图书,但是实际上第一第二个都被删除了,并且直接结束程序(原本完成删除操作后返回主菜单)。
函数如下:
void Delete(struct book* link,int ISBN)
{
struct book *p1,*p2;
int h=0,n;
p2=link;
p1=link->next;
while(p1)
{
if(p1->ISBN==ISBN)
{
h=1;
printf("下列为该图书信息:\n");
printf("ISBN号:%d\n",ISBN);
printf("书名:%s\n",p1->name);
printf("作者:%s\n",p1->writer);
printf("出版社:%s\n",p1->press);
printf("出版日期:%d年%d月%d日\n",p1->date[0],p1->date[1],p1->date[2]);
printf("价格:%.2lf\n\n",p1->price);
printf("您确定要删除该图书吗?\n1:yes!\n2:no!(返回主菜单)\n");
while(1)
{
scanf("%d",&n);
if(n==1)
{
if(p1->next!=NULL)
p2->next=p1->next;
else
p2->next=NULL;
free(p1);
printf("图书删除成功!");
break;
}
else if(n==2)
break;
else
printf("指令错误,请重新输入。");
}
return;
}
else if(p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
else
break;
}
if(h==0)
printf("未找到该图书!");
}