Этот код должен искать 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
//**********************************************
Ну, код делает то, что должен делать. Вы нигде не проверяете, найдено ли найденное вмешательство, и не перемещаете указатель чтения файла.
Вы читаете Интервью только один раз:
InfoFile.read(reinterpret_cast<char *> (&inte), sizeof(Intervention));
Может быть, вы хотели проверять если у вмешательства есть идентификатор, который вы ввели?
while(inte.getID()!=interNo && InfoFile)
InfoFile.read(reinterpret_cast<char *> (&inte), sizeof(Intervention));
Вам нужно раскомментировать строку кода, которую вы, должно быть, закомментировали ранее:
InfoFile.seekg(sizeof(Intervention)*(interNo - 1));
Эта строка на самом деле должна располагать read pointer
к месту в файле, где данный Intervention
написано. Проверьте C ++ ссылка страница для более подробной информации о прочитанном указателе.
Других решений пока нет …