0
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 at memory location 0x003ceb64..

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

4

1 回答 1

1

如果我记得,使用流时的习惯用法之一就是制作循环,例如

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

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

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

这可能会更优雅

于 2013-07-01T22:16:15.840 回答