fstream 和 eof() 的问题(总共花了 5 个小时进行调试、寻找解决方案和测试)
Issues with fstream and eof() (have spent a combined 5 hours debugging, searching for a solution, and testing)
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){
...
这可能会变得更优雅
相关文章:
- 当回溯以零开始时,如何调试崩溃
- 为什么在读取文件大小时文件IO速度会发生变化
- 在linux上调试巨大的C++项目
- 为什么使用__LINE_的代码在发布模式下在MSVC下编译,而不是在调试模式下
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 正在VS调试器中监视映射条目
- 使用调试/崩溃报告将应用程序部署到客户端
- VC++本机单元测试,找不到调试符号
- 如何在C++生成器中禁用"使用调试.dcus"
- 使用vscode调试时,GDB意外退出
- 即使使用调试编译标志,表达式也是"optimized out"
- 调试 CUDA MMU 故障
- 小字符串优化(调试与发布模式)
- 在容量内调整矢量大小时的性能影响
- 调试和自由执行中的信号处理
- 调试编译的服务器在数据库打开时崩溃
- Visual Studio 调试优化如何工作?
- 如何配置Visual Studio Code以使用cygwin,cmake和gcc进行调试
- 从 exe 文件 (Visual Studio ) 启动时调试断言失败
- fstream 和 eof() 的问题(总共花了 5 个小时进行调试、寻找解决方案和测试)