Namespaces
Variants

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

From cppreference.net
int_type sputbackc ( char_type c ) ;

Возвращает символ обратно в область получения.

Если позиция возврата доступна в области получения ( gptr ( ) > eback ( ) ), и символ c равен символу на одну позицию левее gptr() (как определено Traits :: eq ( c, gptr ( ) [ - 1 ] ) ), тогда просто уменьшает следующий указатель ( gptr() ).

В противном случае, вызывает pbackfail ( Traits :: to_int_type ( c ) ) для либо отката области чтения, либо изменения как области чтения, так и, возможно, связанной символьной последовательности.

Функция потока ввода-вывода basic_istream::putback реализована с использованием этой функции.

Содержание

Параметры

c - символ для возврата

Возвращаемое значение

Если позиция возврата была доступна, возвращает символ, на который теперь указывает следующий указатель, преобразованный в int_type с помощью Traits :: to_int_type ( * gptr ( ) ) . Следующий однобайтовый ввод из этого буфера потока вернёт этот символ.

Если позиция возврата была недоступна, возвращает то, что pbackfail() возвращает, то есть Traits :: eof ( ) при неудаче.

Пример

#include <iostream>
#include <sstream>
int main()
{
    std::stringstream s("abcdef"); // gptr() указывает на 'a' в "abcdef"
    std::cout << "Before putback, string holds " << s.str() << '\n';
    char c1 = s.get(); // c1 = 'a', gptr() теперь указывает на 'b' в "abcdef"
    char c2 = s.rdbuf()->sputbackc('z'); // эквивалентно s.putback('z')
                                         // gptr() теперь указывает на 'z' в "zbcdef"
    std::cout << "After putback, string holds " << s.str() << '\n';
    char c3 = s.get(); // c3 = 'z', gptr() теперь указывает на 'b' в "zbcdef"
    char c4 = s.get(); // c4 = 'b', gptr() теперь указывает на 'c' в "zbcdef"
    std::cout << c1 << c2 << c3 << c4 << '\n';
    s.rdbuf()->sputbackc('b');  // gptr() теперь указывает на 'b' в "zbcdef"
    s.rdbuf()->sputbackc('z');  // gptr() теперь указывает на 'z' в "zbcdef"
    int eof = s.rdbuf()->sputbackc('x');  // нечего откатывать: pbackfail() завершается неудачей
    if (eof == EOF)
        std::cout << "No room to putback after 'z'\n";
}

Вывод:

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

Смотрите также

перемещает указатель следующего символа во входной последовательности на одну позицию назад
(публичная функция-член)
помещает символ во входной поток
(публичная функция-член std::basic_istream<CharT,Traits> )