C语言通讯录管理系统的删除模块能运行但数据删除不了怎么解决

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