Namespaces
Variants

std::basic_streambuf<CharT,Traits>:: sungetc

From cppreference.net
int_type sungetc ( ) ;
HTMLタグ、属性、および` `内のC++コードは翻訳せず、元のフォーマットを保持しました。

getエリアにputback位置が利用可能であれば( gptr ( ) > eback ( ) )、次のポインタ( gptr() )をデクリメントし、それが指す文字を返します。

プットバック位置が利用できない場合、可能であれば入力シーケンスをバックアップするために pbackfail() を呼び出します。

I/Oストリーム関数 basic_istream::unget は、この関数を使用して実装されています。

目次

パラメータ

(なし)

戻り値

プットバック位置が利用可能であった場合、次のポインタが現在指している文字を int_type に変換して返します( Traits :: to_int_type ( * gptr ( ) ) を使用)。このストリームバッファからの次の単一文字入力はこの文字を返します。

プットバック位置が利用できない場合、 pbackfail() が返す値を返します。これは失敗時には Traits :: eof ( ) です。

#include <iostream>
#include <sstream>
int main()
{
    std::stringstream s("abcdef"); // gptr() は 'a' を指す
    char c1 = s.get(); // c = 'a', gptr() は 'b' を指す
    char c2 = s.rdbuf()->sungetc(); // s.unget() と同じ: gptr() が再び 'a' を指す
    char c3 = s.get(); // c3 = 'a', gptr() は 'b' を指す
    char c4 = s.get(); // c4 = 'b', gptr() は 'c' を指す
    std::cout << c1 << c2 << c3 << c4 << '\n';
    s.rdbuf()->sungetc();  // 'b' に戻る
    s.rdbuf()->sungetc();  // 'a' に戻る
    int eof = s.rdbuf()->sungetc();  // 戻す文字が無い: pbackfail() が失敗
    if (eof == EOF)
            std::cout << "Nothing to unget after 'a'\n";
}

出力:

aaab
Nothing to unget after 'a'

関連項目

入力シーケンスに1文字を戻す
(公開メンバ関数)
文字の抽出を取り消す
( std::basic_istream<CharT,Traits> の公開メンバ関数)