【问题标题】:Why is this line infinite loop?为什么这条线是无限循环的?
【发布时间】:2017-12-22 11:52:14
【问题描述】:

以下用于读取文件的代码立即生效并完成。

auto copy = [&](const FileName &src, std::ofstream &dst)
{
    std::ifstream r(src);
    std::string line;
    while (std::getline(r, line)) { dst << line << std::endl; }
};

src 是一个小文件,dst 是一个工作输出流。如果我将循环更改为:

while (std::getline(std::ifstream(src), line)) { dst << line << std::endl; }

我的程序一直在 while 循环中运行。为什么要无限循环?我正在使用 Xcode C++11。

【问题讨论】:

  • 你可以输出行。对我来说,这看起来有点像您一直只阅读第一行,因为您似乎总是创建一个新的 ifstream,因此没有保留指针/迭代器并将其设置为任何下一行。
  • 这并没有解决问题,但是您真的需要std::endl 需要的额外内容吗? '\n' 结束一行。

标签: c++ c++11


【解决方案1】:

因为每次你在while循环中调用std::getline,新的std::ifstream(src)都会被初始化,你总是会得到文件的第一行。

【讨论】:

    【解决方案2】:
    while (std::getline(std::ifstream(src), line)) { dst << line << std::endl; }
    

    因为您在每次循环运行时都会初始化流。

    【讨论】:

      【解决方案3】:

      这是因为函数getline(stream, string) 占用了流中的第一行。当您执行ifstream(src) 时,您正在创建一个新流并从头开始。

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-15
        • 2021-08-16
        • 2018-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多