void Delete()/*删除信息*/
{
char DeleteName[8];
system("cls");
int i,y=0;
p1=p2=head;
printf("请输入你要删除的信息的姓名:");
scanf("%s",&DeleteName);
getchar();
while(p1!=NULL)
{
if(strcmp(p1->name,DeleteName)==0)
{
printf("\n%10.8s %12.10s %15.4s\n","姓名","电话号码","QQ号");
printf("\n%10.8s %12.10s %15.14s\n",p1->name,p1->tel,p1->com);
y=1;
printf("\n您要删除的是这条记录吗?1---是;2---否\n");
scanf("%d",&i);
if(i==1)
{
if(p1==head)
{
head=p1->next;
free(p1);
}
else
{
p2->next=p1->next;
free(p1);
if((fp==fopen("txl.dat","w"))!=1)
{
printf("文件打开失败");
exit(1);
}
p1=head;
while(p1->next!=NULL)
{
if(fwrite(p1,sizeof(struct Sign),1,fp)!=1)
printf("写入错误");
p1=p1->next;
}
fclose(fp);
}
printf("\n OK! \n");
}
else
break;
}
else if(strcmp(p1->name,DeleteName)&&(p1->next)==NULL)
{
i=0;
}
p2=p1;
p1=p1->next;
}
if(y==0)
{
printf("对不起,没有找到要删除的通讯名单,请检查你要删除的姓名是否正确\n");
}
system("pause");
}
有好几处逻辑有问题,修改如下:
void Delete()/*删除信息*/
{
char DeleteName[8];
system("cls");
int i,y=0;
p1=p2=head;
printf("请输入你要删除的信息的姓名:");
scanf("%s",&DeleteName);
getchar();
while(p1!=NULL)
{
if(strcmp(p1->name,DeleteName)==0)
{
printf("\n%10.8s %12.10s %15.4s\n","姓名","电话号码","QQ号");
printf("\n%10.8s %12.10s %15.14s\n",p1->name,p1->tel,p1->com);
y=1;
printf("\n您要删除的是这条记录吗?1---是;2---否\n");
scanf("%d",&i);
if(i==1)
{
if(p1==head)
{
head=p1->next;
free(p1);
}
else
{
p2->next=p1->next;
free(p1);
if((fp==fopen("txl.dat","w"))!=1)
{
printf("文件打开失败");
exit(1);
}
p1=head;
while(p1!=NULL) //应该是p1!=NULL,不是p1->next!=NULL,否则最后一个节点写不进去
{
if(fwrite(p1,sizeof(struct Sign),1,fp)!=1)
printf("写入错误");
p1=p1->next;
}
fclose(fp);
}
printf("\n OK! \n");
}
break; //只要找到,最终肯定要跳出循环!
}
//没找到则继续比较下一个节点
p2=p1;
p1=p1->next;
}
if(y==0)
{
printf("对不起,没有找到要删除的通讯名单,请检查你要删除的姓名是否正确\n");
}
system("pause");
}
scanf("%s",&DeleteName);
改成 scanf("%s",DeleteName); 记住,scanf字符串时,数组本身就是指针,不用加&符号
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632