Namespaces
Variants

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

From cppreference.net
int_type sungetc ( ) ;

Wenn eine Putback-Position im Get-Bereich verfügbar ist ( gptr ( ) > eback ( ) ), dann dekrementiert es den nächsten Zeiger ( gptr() ) und gibt das Zeichen zurück, auf das es jetzt zeigt.

Wenn keine Putback-Position verfügbar ist, ruft die Funktion pbackfail() auf, um die Eingabesequenz falls möglich zurückzusetzen.

Die I/O-Stream-Funktion basic_istream::unget wird mithilfe dieser Funktion implementiert.

Inhaltsverzeichnis

Parameter

(keine)

Rückgabewert

Wenn die Putback-Position verfügbar war, gibt das Zeichen zurück, auf das der nächste Zeiger jetzt zeigt, konvertiert zu int_type mit Traits :: to_int_type ( * gptr ( ) ) . Die nächste Einzelzeichen-Eingabe von diesem Streambuf wird dieses Zeichen zurückgeben.

Wenn die Putback-Position nicht verfügbar war, gibt das zurück, was pbackfail() zurückgibt, was bei Fehlschlag Traits :: eof ( ) ist.

Beispiel

#include <iostream>
#include <sstream>
int main()
{
    std::stringstream s("abcdef"); // gptr() zeigt auf 'a'
    char c1 = s.get(); // c = 'a', gptr() zeigt jetzt auf 'b'
    char c2 = s.rdbuf()->sungetc(); // identisch mit s.unget(): gptr() zeigt wieder auf 'a'
    char c3 = s.get(); // c3 = 'a', gptr() zeigt jetzt auf 'b'
    char c4 = s.get(); // c4 = 'b', gptr() zeigt jetzt auf 'c'
    std::cout << c1 << c2 << c3 << c4 << '\n';
    s.rdbuf()->sungetc();  // zurück zu 'b'
    s.rdbuf()->sungetc();  // zurück zu 'a'
    int eof = s.rdbuf()->sungetc();  // nichts mehr zurückzusetzen: pbackfail() schlägt fehl
    if (eof == EOF)
            std::cout << "Nichts mehr zurückzusetzen nach 'a'\n";
}

Ausgabe:

aaab
Nothing to unget after 'a'

Siehe auch

setzt ein Zeichen zurück in die Eingabesequenz
(öffentliche Elementfunktion)
extrahiert ein Zeichen zurück
(öffentliche Elementfunktion von std::basic_istream<CharT,Traits> )