许多网站描述了 istream :: putback()功能,它允许您将一个字符“放回”到输入流中,以便您可以在后续的阅读操作中再次阅读它。
但是,阻止我在同一个流上按顺序多次调用 putback()会阻止我什么?当然,你应该在每次操作后检查错误,以确定它是否成功;然而,我想知道:有没有保证特定类型的流支持一次放回多个字符?
我只是在这里猜测,但我可以想象 istringstream 能够放回与流中字符串长度一样多的字符;但我不太确定 ifstream 是一样的。
这是真的吗?如何找出 putback()在 istream 中有多少个字符?
答案 0 :(得分:4)
如果您想要从流中读取多个字符,可以使用unget()
取消它们:
std::vector<char>&read_top5(std::istream & stream, std::vector<char> & container) {
std::ios_base::sync_with_stdio(false);
char c;
int i=4;
container.clear();
while (stream && stream.get(c)) {
container.push_back(c);
if (--i < 0) break;
if (c == '\n') break;
}
for (int j=0;j<(int)container.size();j++) {
//stream.putback(container[j]); // not working
stream.unget(); // working properly
}
return container;
}
此函数在函数退出后仍在流中时从流中读取前5个字符。