Namespaces
Variants

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

From cppreference.net
int_type sputbackc ( char_type c ) ;

Legt ein Zeichen wieder in den Lesebereich zurück.

Wenn eine Putback-Position im Get-Bereich verfügbar ist ( gptr ( ) > eback ( ) ) und das Zeichen c gleich dem Zeichen eine Position links von gptr() ist (bestimmt durch Traits :: eq ( c, gptr ( ) [ - 1 ] ) ), dann dekrementiert einfach den nächsten Zeiger ( gptr() ).

Andernfalls ruft es pbackfail ( Traits :: to_int_type ( c ) ) auf, um entweder den Lesebereich zurückzusetzen oder sowohl den Lesebereich als auch möglicherweise die zugehörige Zeichensequenz zu modifizieren.

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

Inhaltsverzeichnis

Parameter

c - zurückzulegendes Zeichen

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' in "abcdef"
    std::cout << "Before putback, string holds " << s.str() << '\n';
    char c1 = s.get(); // c1 = 'a', gptr() zeigt jetzt auf 'b' in "abcdef"
    char c2 = s.rdbuf()->sputbackc('z'); // identisch mit s.putback('z')
                                         // gptr() zeigt jetzt auf 'z' in "zbcdef"
    std::cout << "After putback, string holds " << s.str() << '\n';
    char c3 = s.get(); // c3 = 'z', gptr() zeigt jetzt auf 'b' in "zbcdef"
    char c4 = s.get(); // c4 = 'b', gptr() zeigt jetzt auf 'c' in "zbcdef"
    std::cout << c1 << c2 << c3 << c4 << '\n';
    s.rdbuf()->sputbackc('b');  // gptr() zeigt jetzt auf 'b' in "zbcdef"
    s.rdbuf()->sputbackc('z');  // gptr() zeigt jetzt auf 'z' in "zbcdef"
    int eof = s.rdbuf()->sputbackc('x');  // nichts zurückzustellen: pbackfail() schlägt fehl
    if (eof == EOF)
        std::cout << "No room to putback after 'z'\n";
}

Ausgabe:

Before putback, string holds abcdef
After putback, string holds zbcdef
azzb
No room to putback after 'z'

Siehe auch

bewegt den nächsten Zeiger in der Eingabesequenz um eine Position zurück
(öffentliche Elementfunktion)
fügt ein Zeichen in den Eingabestrom ein
(öffentliche Elementfunktion von std::basic_istream<CharT,Traits> )