0

このコードは、ファイル内の各クライアントの iterNo を検索し、その情報を表示することになっています。私の問題は、検索する番号に関係なく、ファイルの最初のアイテムが常に表示されることです。どんな助けでも大歓迎です.今本当に絶望的です.あなたの応答に感謝します.

void View()
{       
    char ans; //answer to store 'y' or 'n'
    Intervention inte;
    int interNo;

    ifstream InfoFile("info.dat", ios::in |ios::binary|ios::app);
    if (!InfoFile)
    {
        cout <<"Error - random files could not be opened.";
    }
    else
    {
        while (true)
        {
            cout << "\nEnter client's interNo number to display ";

            cin >> interNo;

            inte.getClient();
            inte.getAddress();
            inte.getTelNo();
            inte.getTime();
            inte.getDate();
            inte.getAnimal();

            //InfoFile.seekg(sizeof(Intervention)*(interNo - 1));
            InfoFile.read(reinterpret_cast<char *> (&inte), sizeof(Intervention));
            //if not eof show data
            if (!InfoFile.eof())
            {
                //Display the processed
                // info for the employee
                inte.display();
            }
            cout << "Enter another employee's information to display ? [y / n] ";
            fflush(stdin);
            ans = ' ';
            while (ans != 'y' && ans != 'Y' &&
                ans != 'n' && ans != 'N')
            {
                ans = _getch();
            } cout << endl;
            if (ans == 'n' || ans == 'N')
            {
                exit(1);
            }

        }//end while

    }//end else

}//end function view
//**********************************************
4

1 に答える 1

0

さて、コードはそれがすべきことを行います。見つかった介入が探しているものであるかどうかをどこにもチェックせず、ファイル読み取りポインターを移動しません。

ファイル内にIDを保存する場合

介入も一度だけ読んでください。

InfoFile.read(reinterpret_cast<char *> (&inte), sizeof(Intervention));

入力したIDが介入にあるかどうかを確認するつもりだったのでしょうか。

while(inte.getID()!=interNo && InfoFile)
  InfoFile.read(reinterpret_cast<char *> (&inte), sizeof(Intervention));

そうしないと

以前にコメントアウトしたはずのコード行のコメントを解除する必要があります。

InfoFile.seekg(sizeof(Intervention)*(interNo - 1));

この行は、実際には、指定されたが書き込まread pointerれるファイル内の場所に配置する必要がありますIntervention。読み取りポインターの詳細については、C++ のリファレンスページを参照してください。

于 2013-11-11T03:48:06.697 に答える