c++ - fstream 不读取所有整数

标签 c++ data-structures fstream doubly-linked-list

我创建了一个双向链表类和驱动程序。我应该从文本文件中读取列表中的整数,但它没有读取最后一个数字 (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/

相关文章:

c++ - 使用模板元编程的递归

C++ Linux 如何使用 libtar

c++ - fstream get 方法的行为不一致

c++ - 如何在C++中创建日志文件

c++ - 如何制作一个可以处理 .txt 文件而不显示它的 C++ 程序

c++ - 将对话框控件移动到选项卡中?

c++ - OpenMP 奇怪行为 - 性能差异

java - 我应该根据需要使用哪种数据结构?

c++ - 在特定情况下无法向下渗透 MIN 二进制堆

c++ - 无法从 'Node<T> *' 推断出 'int' 的模板参数