首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

std::basic_streambuf::sungetc

int_type sungetc();

如果在GET区域%28中有一个备用位置gptr() > eback()%29,然后减少下一个指针%28gptr()%29并返回它现在指向的字符。

如果没有备用位置,则调用pbackfail()如果可能的话,可以备份输入序列。

I/O流函数basic_istream::unget是根据此功能实现的。

参数

%280%29

返回值

如果返回位置可用,则返回下一个指针指向的字符,转换为int_type带着Traits::to_int_type(*gptr())下一个单字符输入将返回这个字符。

如果没有备用位置,则返回pbackfail()返回,即Traits::eof()在失败的时候。

二次

代码语言:javascript
复制
#include <iostream>
#include <sstream>
 
int main()
{
    std::stringstream s("abcdef"); // gptr() poitns to 'a'
    char c1 = s.get(); // c = 'a', gptr() now points to 'b' 
    char c2 = s.rdbuf()->sungetc(); // same as s.unget(): gptr() points to 'a' again 
    char c3 = s.get(); // c3 = 'a', gptr() now points to 'b'
    char c4 = s.get(); // c4 = 'b', gptr() now points to 'c'
    std::cout << c1 << c2 << c3 << c4 << '\n';
 
    s.rdbuf()->sungetc();  // back to 'b'
    s.rdbuf()->sungetc();  // back to 'a'
    int eof = s.rdbuf()->sungetc();  // nothing to unget: pbackfail() fails
    if (eof == EOF)
            std::cout << "Nothing to unget after 'a'\n";
}

二次

产出:

二次

代码语言:javascript
复制
aaab
Nothing to unget after 'a'

二次

另见

sputbackc

puts one character back in the input sequence (public member function)

unget

unextracts a character (public member function of std::basic_istream)

代码语言:txt
复制
 © cppreference.com

在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。

扫码关注腾讯云开发者

领取腾讯云代金券