我创建了一个双向链表类和驱动程序。我应该从文本文件中读取列表中的整数,但它没有读取最后一个数字 (37),我不确定为什么。我几乎可以肯定这不是 initializeItem() 或 insertItem() 函数的问题,因此我没有列出这些函数,但如果需要我可以列出。
这是文本文件:
9 10 3 84 19 63 1 45 100 37
这是我必须阅读的代码:
DoublyLinkedList list;
ItemType item;
int input;
std::fstream fs;
fs.open(argv[1], fstream::in);
if (fs.is_open())
{
fs >> input;
while (!fs.eof())
{
item.initialize(input);
list.insertItem(item);
fs >> input;
}
}
else
{
cout << "File could not be opened."
<< " Try again"
<< endl;
return 0;
}
当我打印出列表(排序)时,我得到了这个:
1 3 9 10 19 45 63 84 100
最佳答案
如果操作因读取文件末尾而未能完成,则不会触发流上的 .eof()
函数。相反,它报告在任何操作过程中是否遇到了流的末尾。即使最后一次操作成功,.eof()
也完全有可能返回 true。事实上,普遍的看法是,如果您正在进行流读取,测试 .eof()
几乎总是错误的。
这里有一个更好的从流中读取的方法:
while (fs >> input) {
... do something with fs ...
}
此代码将重复从流中提取值,直到操作未能成功完成(由 .fail()
确定,而不是 .eof()
)。如果您知道数字是用空格分隔的,那么这种通用模式可能是从流中读取数字的最佳方式。
关于c++ - fstream 不读取所有整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46880765/