Namespaces
Variants

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

From cppreference.net
int_type sputbackc ( char_type c ) ;

Devuelve un carácter al área de obtención.

Si hay una posición de retroceso disponible en el área de obtención ( gptr ( ) > eback ( ) ), y el carácter c es igual al carácter una posición a la izquierda de gptr() (determinado por Traits :: eq ( c, gptr ( ) [ - 1 ] ) ), entonces simplemente decrementa el siguiente puntero ( gptr() ).

De lo contrario, llama a pbackfail ( Traits :: to_int_type ( c ) ) para retroceder el área de obtención o modificar tanto el área de obtención como posiblemente la secuencia de caracteres asociada.

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

Contenidos

Parámetros

c - carácter a devolver

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 retroceso 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' en "abcdef"
    std::cout << "Before putback, string holds " << s.str() << '\n';
    char c1 = s.get(); // c1 = 'a', gptr() ahora apunta a 'b' en "abcdef"
    char c2 = s.rdbuf()->sputbackc('z'); // igual que s.putback('z')
                                         // gptr() ahora apunta a 'z' en "zbcdef"
    std::cout << "After putback, string holds " << s.str() << '\n';
    char c3 = s.get(); // c3 = 'z', gptr() ahora apunta a 'b' en "zbcdef"
    char c4 = s.get(); // c4 = 'b', gptr() ahora apunta a 'c' en "zbcdef"
    std::cout << c1 << c2 << c3 << c4 << '\n';
    s.rdbuf()->sputbackc('b');  // gptr() ahora apunta a 'b' en "zbcdef"
    s.rdbuf()->sputbackc('z');  // gptr() ahora apunta a 'z' en "zbcdef"
    int eof = s.rdbuf()->sputbackc('x');  // nada que retroceder: pbackfail() falla
    if (eof == EOF)
        std::cout << "No room to putback after 'z'\n";
}

Salida:

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

Véase también

retrocede el puntero siguiente en la secuencia de entrada en uno
(función miembro pública)
coloca un carácter en el flujo de entrada
(función miembro pública de std::basic_istream<CharT,Traits> )