fstream 和 eof() 的问题(总共花了 5 个小时进行调试、寻找解决方案和测试)

Issues with fstream and eof() (have spent a combined 5 hours debugging, searching for a solution, and testing)

本文关键字:小时 调试 解决方案 测试 寻找 问题 eof fstream      更新时间:2023-10-16
int i = 0;
while(!fin.eof())
{
    fin >> fname;
    fin >> lname;
    fin >> id;
    customer[i].setFname(fname);
    customer[i].setLname(lname);
    customer[i].setId(id);
    i++;
}
fin.close();

当我的程序到达这个while循环的第四次迭代(并且我的输入.txt文件中的文本用完(时,Visual Studio会提示我:

程序 5.exe 中0x754bc41f处未处理的异常:Microsoft C++异常:std::ios_base::内存位置 0x003ceb64 处失败。

我不知道为什么。我尝试将 !fin.eof(( 替换为 (fin>> x(,其中 x 是一个整数,我尝试了一个 do-while 而不是一段时间,我尝试使用 get, getline。我认为这可能是一个问题,eof 没有触发我的>>运算符,所以我添加了 fin.peek((;在循环的最末端,这样它在偷看时会触发 EOF。我只是不知道我做错了什么。假设我的客户类工作正常,我已经在这个循环之外进行了测试,它工作得很好。

如果我记得的话,使用流时的习语之一是制作类似

while (cin >> x){
   //do something...

您应该在读取值时检查流的状态。 你可以做类似的事情

while(fin >> fname && fin >> lname && fin >> id){
...

这可能会变得更优雅