This question already has answers here:
Why is iostream::eof inside a loop condition (i.e. `while (!stream.eof())`) considered wrong?

(4个答案)


6年前关闭。




所以我正在使用while循环将数据从文本文件读入 vector 。

最初,我以这种方式设置了代码:
iftream infile;
while(infile)  // or even if i do while(!infile.eof())
    {
        infile>>data;
        vector1.push_back(data); //adding data in to the vector
    }

-但这引起了一个小问题,由于某种原因,它在文本文件的最后一项中读取了两次。

但是,如果我以这种方式设置了代码,那么一切都会很好:
iftream infile;
while(infile>>data)
{
    vector1.push_back(data); //adding data in to the vector
}

为什么第一个代码在最后一个项目中读取两次?

最佳答案

看来data结构未在文件内完全对齐,即,当您的程序尝试读取最后一个片段时,它尚未到达文件末尾,但是没有足够的数据可读取。因此infile >> data失败,这意味着data的内容未更改,因此您将其再次添加到 vector 中。

在第二种情况下,您将检查读取结果,因此,如果未正确读取data内容,则不会尝试将其推送。

关于c++ - 使用while循环从文本文件中读取数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22899215/

10-11 23:04
查看更多