Namespaces
Variants

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

From cppreference.net
int_type sungetc ( ) ;

Si hay una posición de retroceso disponible en el área de obtención ( gptr ( ) > eback ( ) ), entonces decrementa el siguiente puntero ( gptr() ) y devuelve el carácter al que ahora apunta.

Si una posición de putback no está disponible, entonces llama a pbackfail() para retroceder la secuencia de entrada si es posible.

La función de flujo de E/S basic_istream::unget se implementa en términos de esta función.

Contenidos

Parámetros

(ninguno)

Valor de retorno

Si la posición de retroceso estaba disponible, devuelve el carácter al que ahora apunta el siguiente puntero, convertido a int_type con Traits :: to_int_type ( * gptr ( ) ) . La siguiente entrada de un solo carácter desde este streambuf devolverá este carácter.

Si la posición de reintroducción no estaba disponible, retorna lo que pbackfail() retorna, que es Traits :: eof ( ) en caso de fallo.

Ejemplo

#include <iostream>
#include <sstream>
int main()
{
    std::stringstream s("abcdef"); // gptr() apunta a 'a'
    char c1 = s.get(); // c = 'a', gptr() ahora apunta a 'b' 
    char c2 = s.rdbuf()->sungetc(); // igual que s.unget(): gptr() apunta a 'a' nuevamente 
    char c3 = s.get(); // c3 = 'a', gptr() ahora apunta a 'b'
    char c4 = s.get(); // c4 = 'b', gptr() ahora apunta a 'c'
    std::cout << c1 << c2 << c3 << c4 << '\n';
    s.rdbuf()->sungetc();  // retrocede a 'b'
    s.rdbuf()->sungetc();  // retrocede a 'a'
    int eof = s.rdbuf()->sungetc();  // nada que retroceder: pbackfail() falla
    if (eof == EOF)
            std::cout << "Nothing to unget after 'a'\n";
}

Salida:

aaab
Nothing to unget after 'a'

Véase también

coloca un carácter de vuelta en la secuencia de entrada
(función miembro pública)
extrae un carácter hacia atrás
(función miembro pública de std::basic_istream<CharT,Traits> )