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");
}
C语言通讯录管理系统的删除模块能运行但数据删除不了怎么解决
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
3条回答 默认 最新
CSDN专家-link 2021-06-08 05:42关注有好几处逻辑有问题,修改如下:
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"); }本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报