getline不能用于第二个呼叫
问题描述:
第二次不起作用。我试图filestr.clear()/ flush()和其他人没有结果。如果我在第一时间评论一切正常,但我需要对象的数量。有人请帮助getline不能用于第二个呼叫
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
}
答
第一个循环从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
。你应该适当地缩进你的代码,而不是弄得乱七八糟。
代码格式不正确。你似乎认为2nd while循环是*嵌套*,但实际上它是在* first循环之后运行的。 – zett42