符号从ifstream读取两次

时间:2014-02-24 09:20:23

标签: c++ ifstream

我发现std :: ifstream有一个奇怪的行为(或者更多可能是我错过了如何正确使用它)。我有以下程序:

#include <iostream>
#include <fstream>

int main(int argc, char** argv) {

        std::ifstream file;
        file.open(argv[1]);

        while(not file.eof()) {
                int x;
                file >> x;
                std::cout << x << std::endl;
        }

        return 0;
}

我在包含以空格分隔的数字的文件上调用它,如下所示:

1 34 567 3

程序输出:

1
34
567
3
3

最后一个数字总是重复的。我想这是因为它在读完最后一个数字后没有达到EOF,它达到了强制性的'\ n'文本文件,下一个文件&gt;&gt; x再次给我一个最后读取的数字。

如何才能正确检测到没有更多数字可供阅读?

1 个答案:

答案 0 :(得分:1)

请尝试:

int x;
    while(file >> x;) {  
       std::cout << x << std::endl;
      }

为了更好地理解Please go through this.

希望这会对你有所帮助。