注册 登录
编程论坛 C++教室

关于结构体指针删除问题

G梦 发布于 2014-09-04 15:27, 538 次点击
只有本站会员才能查看附件,请 登录

程序代码:
void Cancle(LinkList &l)
    {
        ClientInfo *CI=new ClientInfo;
        ClientInfo *p=new ClientInfo;
        ClientInfo *q=new ClientInfo;
        CI=l.cFirst->next;
        int CardNum;
        char*PlaneNum=new char;
        cout<<"===========退票============"<<endl;
        cout<<"请输入您的证件号:";
        cin>>CardNum;
        while(1)
        {
            if(CI->CardNum!=CardNum&&CI!=NULL)
            {
                CI=CI->next;
            }
            if(CI==NULL)
            {
                cout<<"证件号输入有误,请重新输入:";
                CI=l.cFirst->next;
                cin>>CardNum;
            }
            else
            {
                break;
            }
        }
        cout<<"您的所有订单信息如下:"<<endl;
        /*@@@显示该客户所有订单信息@@@*/
        while(CI!=NULL)
        {
            if(CI->CardNum==CardNum)
            {   
                cout<<"======================="<<endl;
                cout<<"姓名:    "<<CI->name<<endl;
                cout<<"订单号:  "<<CI->OrderNum<<endl;
                cout<<"证件号:  "<<CI->CardNum<<endl;
                cout<<"航班号:  "<<CI->PlaneNum<<endl;
                cout<<"======================="<<endl;
                CI=CI->next;
            }
            else
            {
                CI=CI->next;
            }
           
        }
        CI=l.cFirst->next;
        cout<<"请输入您想要退票的航班号:";
        fflush(stdin);
        gets(PlaneNum);
        while(1)
        {
            if(strcmp(CI->PlaneNum,PlaneNum)!=0&&CI!=NULL)
            {
                CI=CI->next;
            }
            if(CI==NULL)
            {
                cout<<"航班号输入有误,请重新输入:";
                CI=l.cFirst->next;
                fflush(stdin);
                gets(PlaneNum);
            }
            else
            {
                break;
            }
        }
        //销毁结点
        q=CI=l.cFirst->next;
        while(strcmp(CI->PlaneNum,PlaneNum)!=0&&CI!=NULL)
        {
            p=CI;
            CI=CI->next;
        }
        if(strcmp(CI->PlaneNum,PlaneNum)==0)
        {
        
                p->next=CI->next;
                delete CI;
                CI=NULL;
                cout<<"退票成功!";
        
        }
        ofstream fout("航班预订情况.txt");
        if(!fout)
        {
            cout<<"文件打开失败!";
            exit(-1);
        }
        while(q!=NULL)
        {
            cout<<"111";
            cout<<q->PlaneNum;
            cout<<"222";
            fout<<q->PlaneNum<<" ";
            fout<<q->name<<" "<<q->OrderNum<<" "<<endl;
            q=q->next;
        }
        fout.close();
   
    }

源程序已经上传,主要出现问题的就是我贴的一个cancle()退票函数,删除一个结点指针后为什么不能正确写入文件了啊,楼主表示自己都快调崩溃了,就是发现不了问题,求大神相助
2 回复
#2
G梦2014-09-04 15:28
那个什么cout<<"1111";cout<<"222";的请自动忽略掉,是我自己测试用的
#3
G梦2014-09-04 17:34
肿么没人回复==,不过楼主表示刚刚解决了,现在把解决方案写出来给大家参考参考,也给自己提个醒:
        原来问题出在标示要删除的CI指针的前一个指针p上,原来一开始就没给它初始化,导致p指针虽然链接上了后面的指针,但是当删除的是除头指针外的第一个结点时,头指针并没能连接上p指针,最终导致程序异常终止
        问题虽然解决了,但还是欢迎大家继续来讨论~
1