std::basic_streambuf::sungetc
性病:基本[医]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()
在失败的时候。
例
二次
#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";
}
二次
产出:
二次
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) |
© cppreference.com
在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。
http://en.cppreference.com/w/cpp/io/basic[医]Streambuf/sungetc