双向链接列表的部分功能无法正常工作

时间:2013-01-14 13:02:38

标签: c++

在这个函数中我使用了2个条件,对于响应== 1,指针由注册号返回,并且该函数工作得很好,另一方面,如果响应== 2,指针由字符串名称返回,如果它采用新的输入名称,但随后程序突然结束,

我添加了指针返回功能和编辑功能!请帮忙

     // edit student function , helping functions , pointer by registration and name 
     // at end    
 void LAB_PROJECT::edit_student()
 {
    int response = 0;
    string search_name;
    int search_reg = 0;

    cout << "\n \n  -- Select Search Option 1 or 2 Accordingly" << endl;
    cout << "\n       1--Registration ";
    cout << "\n       2--Student's Name" << " >>  " ;
    cin >> response;

    if (response==1)
    {
        cout << "\n \n Enter Registration No: ";
        cin >> search_reg;

        Node*temp1;

        temp1 = pointer_by_registration(search_reg);

        cin.ignore(1,'\n');
        string new_name;

        cout << "\n \n Enter New Name ";
        getline(cin,new_name,'\n');
        temp1->student_name = new_name;
        return;

    }
    else if(response==2)
    {
        cout << "\n \n Enter Student's Name , that you want to search " << endl;
        getline(cin,search_name,'\n');
        cin.ignore(1,'\n');
        Node*temp2;

        temp2 = pointer_by_name(search_name);
        string new_name;

        cout << "\n \n Enter New Name";
        getline(cin,new_name,'\n');
        cin.ignore(1,'\n');
        temp2->student_name=new_name;
        return;
    }
 }

 Node* LAB_PROJECT::pointer_by_name(string getin)
 {
       string checker;
       checker = getin;

       Node*temp1;
       temp1 = startptr;

       while(temp1 != NULL)
       {
           if (checker == temp1->student_name)
           {
               return (temp1);
           }
           temp1=temp1->nextptr;
       }
  }


 Node* LAB_PROJECT::pointer_by_registration(int reg_key)
{
int key = 0;
key = reg_key;

Node* temp1;
temp1 = startptr;

while(temp1 !=NULL)
{
    if(key == temp1->registration)
    {
        return(temp1);
    }
    temp1=temp1->nextptr;
 }
 }

2 个答案:

答案 0 :(得分:0)

我在这里看到的唯一一件事是你的两个搜索功能中未定义的行为:

Node* LAB_PROJECT::pointer_by_registration(int reg_key);
Node* LAB_PROJECT::pointer_by_name(string getin);

在这两种情况下,如果未找到搜索条件,则不返回值。你的编译器应该给你一个警告。我希望你能回复NULL

哦,我想我应该补充一点,你真的需要测试NULL,而不是假设函数返回了一个有效的指针。

答案 1 :(得分:0)

我发现了问题,Pointer_by_name的代码很好,

问题是我在

之后输入了cin.ignore(1,'\n');
        `cout << "\n \n Enter New Name";`
         getline(cin,new_name,'\n');` 

该名称的最后一个字符从流行中刷新,它返回了一个NULL指针,但该程序在使用时与其他函数一起冻结,现在效果非常好......对所有人都感谢!