为什么ifstream两次返回输入文件的最后一个值?

时间:2014-11-13 17:04:02

标签: c++ ifstream

为什么ifstream两次返回字符串的最后一个值?

size_t c;
    while (1){
        myfile >> c;
        cells.push_back(c);
        if (myfile.eof()) break;
    }
    for (int i = 0; i < cells.size(); i++) cout << cells[i] << endl;

输入

    2   3
    9   7   11
    12  5   6
    3   4

细胞[7] =细胞[8] = 4

我已经使用一些类似格式的输入完成了这项工作,并为所有这些输入完成了这项工作。

2 个答案:

答案 0 :(得分:3)

执行此操作的惯用方法是

while (myfile >> c){

}

这完全消除了您的问题,因为在读取最后一个值时未达到eof(),但是当流无法读取时,因此在失败后您执行另一个push_back。上述while构造的优点是它会在失败时立即中断。

答案 1 :(得分:0)

在使用返回的数据之前,应始终检查I / O操作的结果。

在这种情况下,这意味着您对eof()的检查应该在push_back()来电之前。为了使代码更安全,您还应该在流上添加fail()的检查,因为流可能由于其他原因而无法达到EOF而失败。