【问题标题】:how to use eof in a for loop with iterating integer c++如何在迭代整数c ++的for循环中使用eof
【发布时间】:2011-01-12 19:00:57
【问题描述】:

这给了我一个分段错误:

for (int i=0; !file.eof();i++)
{
  getline(file,line);
  roughInput.lines[i].split(line);
}

这不是

for (int i=0; i<2;i++)
{
  getline(file,line);
  roughInput.lines[i].split(line);
}

根据我的理解,应该将 i 加一直到文件结束,对吗? 由于我在 i-net 上找不到太多示例,有没有更好的解决方案?

【问题讨论】:

  • 这是在黑暗中刺伤,但可能是由于过度索引roughInput.lines 引起的段错误。使用调试器准确查找段错误发生的时间。
  • @suszterpatt,是的,问题出现了,因为 i 的增量比矢量线中的对象数高 1[]

标签: c++ loops for-loop eof


【解决方案1】:

您的循环可能运行了太多次。 file.eof() 直到您在文件末尾尝试阅读之后才会返回 false。您可能希望在getline 调用和split 之间进行检查:

    getline(file, line);
    if (!file.eof())
        roughInput.lines[i].split(line);

并相应地修复循环逻辑。

但是,更好的解决方案是动态增长roughInput.lines,这样如果文件比您预期的长,您就不会出现段错误。

【讨论】:

  • 不能动态增长 split() 将行的一部分与类进行比较。 if(!eof) 有效,谢谢
  • 我也相信for (int i = 0; file; i++) 会起作用(并且适用于存在除 eof 之外的流错误的情况)。
猜你喜欢
  • 1970-01-01
  • 2022-12-08
  • 2010-10-03
  • 2012-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多