0

この関数では、応答 == 1 に対して 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;
 }
 }
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

ここで一目でわかる唯一のことは、2 つの検索関数の未定義の動作です。

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 に答える