Spec-Zone.ru › C++

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

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()). Следующий ввод одного символа из этого streambuf вернёт этот символ.

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

Пример

#include <iostream>
#include <sstream>

int main()
{
    std::stringstream s("abcdef"); // gptr() points to 'a' in "abcdef"
    std::cout << "Before putback, string holds " << s.str() << '\n';
    char c1 = s.get(); // c1 = 'a', gptr() now points to 'b' in "abcdef"
    char c2 = s.rdbuf()->sputbackc('z'); // same as s.putback('z')
                                         // gptr() now points to 'z' in "zbcdef"
    std::cout << "After putback, string holds " << s.str() << '\n';
    char c3 = s.get(); // c3 = 'z', gptr() now points to 'b' in "zbcdef"
    char c4 = s.get(); // c4 = 'b', gptr() now points to 'c' in "zbcdef"
    std::cout << c1 << c2 << c3 << c4 << '\n';

    s.rdbuf()->sputbackc('b');  // gptr() now points to 'b' in "zbcdef"
    s.rdbuf()->sputbackc('z');  // gptr() now points to 'z' in "zbcdef"
    int eof = s.rdbuf()->sputbackc('x');  // nothing to unget: pbackfail() fails
    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'

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/basic_streambuf/sputbackc

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API