Namespaces
Variants

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

From cppreference.net
int_type sputbackc ( char_type c ) ;

Remet un caractère dans la zone de lecture.

Si une position de remise en arrière est disponible dans la zone de lecture ( gptr ( ) > eback ( ) ), et que le caractère c est égal au caractère situé une position à gauche de gptr() (tel que déterminé par Traits :: eq ( c, gptr ( ) [ - 1 ] ) ), alors décrémente simplement le pointeur suivant ( gptr() ).

Sinon, appelle pbackfail ( Traits :: to_int_type ( c ) ) pour soit reculer la zone de lecture, soit modifier à la fois la zone de lecture et éventuellement la séquence de caractères associée.

La fonction de flux d'E/S basic_istream::putback est implémentée en termes de cette fonction.

Table des matières

Paramètres

c - caractère à remettre

Valeur de retour

Si la position de remise était disponible, retourne le caractère vers lequel pointe maintenant le pointeur suivant, converti en int_type avec Traits :: to_int_type ( * gptr ( ) ) . La prochaine entrée de caractère unique depuis ce tampon de flux retournera ce caractère.

Si la position de remise n'était pas disponible, retourne ce que pbackfail() retourne, c'est-à-dire Traits :: eof ( ) en cas d'échec.

Exemple

#include <iostream>
#include <sstream>
int main()
{
    std::stringstream s("abcdef"); // gptr() pointe vers 'a' dans "abcdef"
    std::cout << "Avant putback, la chaîne contient " << s.str() << '\n';
    char c1 = s.get(); // c1 = 'a', gptr() pointe maintenant vers 'b' dans "abcdef"
    char c2 = s.rdbuf()->sputbackc('z'); // équivalent à s.putback('z')
                                         // gptr() pointe maintenant vers 'z' dans "zbcdef"
    std::cout << "Après putback, la chaîne contient " << s.str() << '\n';
    char c3 = s.get(); // c3 = 'z', gptr() pointe maintenant vers 'b' dans "zbcdef"
    char c4 = s.get(); // c4 = 'b', gptr() pointe maintenant vers 'c' dans "zbcdef"
    std::cout << c1 << c2 << c3 << c4 << '\n';
    s.rdbuf()->sputbackc('b');  // gptr() pointe maintenant vers 'b' dans "zbcdef"
    s.rdbuf()->sputbackc('z');  // gptr() pointe maintenant vers 'z' dans "zbcdef"
    int eof = s.rdbuf()->sputbackc('x');  // rien à remettre : pbackfail() échoue
    if (eof == EOF)
        std::cout << "Aucun espace pour putback après 'z'\n";
}

Sortie :

Avant putback, la chaîne contient abcdef
Après putback, la chaîne contient zbcdef
azzb
Aucun espace pour putback après 'z'

Voir aussi

déplace le pointeur suivant dans la séquence d'entrée d'une position vers l'arrière
(fonction membre publique)
place un caractère dans le flux d'entrée
(fonction membre publique de std::basic_istream<CharT,Traits> )