Namespaces
Variants

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

From cppreference.net
int_type sungetc ( ) ;

Si une position de remise est disponible dans la zone de lecture ( gptr ( ) > eback ( ) ), alors décrémente le pointeur suivant ( gptr() ) et retourne le caractère qu'il désigne désormais.

Si une position de remise en arrière n'est pas disponible, alors appelle pbackfail() pour reculer la séquence d'entrée si possible.

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

Table des matières

Paramètres

(aucun)

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'
    char c1 = s.get(); // c = 'a', gptr() pointe maintenant vers 'b'
    char c2 = s.rdbuf()->sungetc(); // identique à s.unget() : gptr() pointe à nouveau vers 'a'
    char c3 = s.get(); // c3 = 'a', gptr() pointe maintenant vers 'b'
    char c4 = s.get(); // c4 = 'b', gptr() pointe maintenant vers 'c'
    std::cout << c1 << c2 << c3 << c4 << '\n';
    s.rdbuf()->sungetc();  // retour à 'b'
    s.rdbuf()->sungetc();  // retour à 'a'
    int eof = s.rdbuf()->sungetc();  // rien à défaire : pbackfail() échoue
    if (eof == EOF)
            std::cout << "Rien à défaire après 'a'\n";
}

Sortie :

aaab
Rien à défaire après 'a'

Voir aussi

replace un caractère dans la séquence d'entrée
(fonction membre publique)
dés-extrait un caractère
(fonction membre publique de std::basic_istream<CharT,Traits> )