为什么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
我已经使用一些类似格式的输入完成了这项工作,并为所有这些输入完成了这项工作。
答案 0 :(得分:3)
执行此操作的惯用方法是
while (myfile >> c){
}
这完全消除了您的问题,因为在读取最后一个值时未达到eof(),但是当流无法读取时,因此在失败后您执行另一个push_back。上述while构造的优点是它会在失败时立即中断。
答案 1 :(得分:0)
在使用返回的数据之前,应始终检查I / O操作的结果。
在这种情况下,这意味着您对eof()
的检查应该在push_back()
来电之前。为了使代码更安全,您还应该在流上添加fail()
的检查,因为流可能由于其他原因而无法达到EOF而失败。