c++ - fstream 和 eof() 的问题(总共花了 5 个小时进行调试、搜索解决方案和测试)

标签 c++ file-io fstream

<分区>

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 提示我:

program5.exe 中 0x754bc41f 处的未处理异常:Microsoft C++ 异常:std::ios_base::failure 位于内存位置 0x003ceb64..

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

最佳答案

如果我还记得的话,使用流时的习惯用法之一就是制作像这样的循环

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

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

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

这可能会变得更优雅

关于c++ - fstream 和 eof() 的问题(总共花了 5 个小时进行调试、搜索解决方案和测试),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17414421/

相关文章:

c++后端使用swig wrapper调用python级别定义的回调

c++ - 无法转换为指针类型: C error

c - c 中的 getline() 更改我的数据并导致内存错误

Python 从文件中删除用户选择的一行

c++ - OpenGL 的标准化坐标

c++ - SourceLink:PDB 文件名大小写与存储库不匹配,破坏 SourceLink

java - 如何省略将 '\n'(换行符)添加到从文件读取的字符数组中

c++ - fstream 产生非常奇怪的行为

c++ - 读取此文件以便稍后操作的最佳方式?

c++ - 关闭 fstream 以便可以在代码中进一步编辑文件