【问题标题】:getline not working on second callgetline 在第二次通话中不起作用
【发布时间】:2017-04-22 13:26:36
【问题描述】:

第二个 while 不起作用。我尝试了 filestr.clear()/flush() 和其他没有结果。如果我在一切正常时评论第一个,但我需要对象的数量。请有人帮忙

   while (std::getline(filestr, line)) {
            if (line.find("<rect") != std::string::npos) count_rect++;
        }
        rect = new Rectangle[count_rect];
   while (std::getline(filestr, line1)) {
        //code
    }

【问题讨论】:

  • 代码格式不正确。您似乎认为第二个 while 循环是 嵌套的,但实际上它是在 第一个循环之后运行的。

标签: c++ fstream getline


【解决方案1】:

第一个循环从filestr 中提取行,直到没有可读取的内容。

很难理解为什么您认为第二个循环会找到更多行。如果第二个循环有任何输入要读取,那么第一个循环已经读取了它。

我不能自信地提出修复建议,因为您没有告诉我们您的代码应该做什么。但是,假设filestr 是一个文件流,您可能希望在您的clear 操作之后将读取光标 移到开头:

filestr.clear();               // clear any state flags
filestr.seekg(0, ios::beg);    // move cursor to start so we read everything again

如果 filestr 命名不当并且实际上代表一个非文件流,则您不能这样做,并且需要一种全新的方法来处理您的预扫描算法。

此外,您应该避免使用new,而应使用std::vector。而且你应该正确缩进你的代码而不是弄得一团糟。

【讨论】:

    猜你喜欢
    • 2011-11-10
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    • 2021-01-13
    • 1970-01-01
    • 2014-01-31
    • 2015-06-21
    • 2011-10-04
    相关资源
    最近更新 更多