【问题标题】:Calling putback() on istream multiple times在 istream 上多次调用 putback()
【发布时间】:2016-03-25 03:46:27
【问题描述】:

许多网站都描述了 istream::putback() 函数,该函数可让您将字符“放回”输入流中,以便在后续读取操作中再次读取。

但是,有什么能阻止我在同一个流上按顺序多次调用 putback() 呢?当然,您应该在每次操作后检查错误以了解它是否成功;然而,我想知道:是否可以保证某种特定类型的流支持一次放回多个字符?

我只是在这里猜测,但我可以想象 istringstream 能够放回与流中字符串长度一样多的字符;但我不太确定 ifstream 是否相同。

这是真的吗?如何找出我可以putback()istream 中的字符数?

【问题讨论】:

    标签: c++ istream


    【解决方案1】:

    如果您想从一个流中读取多个字符,您可以使用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 个字符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-05
      • 2014-04-17
      • 1970-01-01
      • 1970-01-01
      • 2014-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多