此代码应该搜索文件中每个客户端的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 :(得分:0)
代码可以做它应该做的事情。如果找到的干预措施是您要查找的干预措施,则不会在任何地方进行检查,也不会移动文件读取指针。
你也只读过一次干预:
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++ reference页面,了解有关读指针的更多详细信息。