std::basic_streambuf<CharT,Traits>:: sputbackc
|
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>
)
|