ღ゜Staid ོ 2021-06-07 20:39 采纳率: 100%
浏览 33
已采纳

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");
}

  • 写回答

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");
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)