【问题标题】:Reading a text file line by line in C++在 C++ 中逐行读取文本文件
【发布时间】:2012-10-11 02:56:24
【问题描述】:

下面的代码是如何工作的? for 循环的计数器在哪里?如何将计数器重置为行号 0。

for (std::string line;std::getline(ifs, line); )
{
}

【问题讨论】:

    标签: c++ string io


    【解决方案1】:

    不需要柜台。这相当于

    std::string line;
    while(getline(ifs, line))
    {
    }
    

    有一些方法可以将输入迭代器移回文件的开头。类似:ifs.seekg(0, std::ios::beg); 应该可以解决问题。

    【讨论】:

      【解决方案2】:

      您的for 循环相当于:

      {
          std::string line;
          while (std::getline(ifs, line)) {
          }
      }
      

      换句话说:“只要getline 返回true,就继续迭代”。

      【讨论】:

      • @rajat @​​987654321@ 通过文件。
      • 我找到了一个更简单的方法,我只是关闭并重新打开文件。 > ifs.close();ifs.open(文件名);
      • @rajat 可能“更容易”,但它是一个 hack - 重新打开比寻找慢。你确实想要寻找。
      • @rajat ::shudder:: 使用seek。只有一个系统调用而不是两个,加上关闭/重新打开会引入竞争条件,虽然与此相关的错误可能很少见,但实际上无法调试。例如,在类 unix 系统上,文件可能同时已从命令行中删除,关闭并重新打开将失败(因为文件将消失),而查找仍然有效。
      【解决方案3】:

      要将计数器重置为第 0 行(即流的开头),您应该使用

      ifs.seekg (0, ios::beg);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-11
        • 1970-01-01
        • 2022-01-25
        • 1970-01-01
        • 2010-12-24
        • 2010-11-19
        • 1970-01-01
        相关资源
        最近更新 更多