0

在这个函数中,我使用了 2 个条件,对于 response == 1 ,指针由注册号返回,并且该函数工作得很好,另一方面,如果 response==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;
 }
 }
4

2 回答 2

0

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

问题是我进入 cin.ignore(1,'\n');

        `cout << "\n \n Enter New Name";`
         getline(cin,new_name,'\n');` 

这导致名称的最后一个字符从流线中刷新,它返回一个 NULL 指针,但程序在与另一个函数一起使用时冻结,现在工作得非常好.. 谢谢大家!

于 2013-01-15T04:16:25.540 回答
0

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

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

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

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

于 2013-01-14T13:23:56.470 回答