Как искать и отображать контент из файла с произвольным доступом?

Этот код должен искать 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
//**********************************************

0

Решение

Ну, код делает то, что должен делать. Вы нигде не проверяете, найдено ли найденное вмешательство, и не перемещаете указатель чтения файла.

Если вы храните идентификаторы внутри файла

Вы читаете Интервью только один раз:

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 ++ ссылка страница для более подробной информации о прочитанном указателе.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]