Spec-Zone.ru › C++

std::basic_istream<CharT,Traits>::putback

basic_istream& putback( char_type ch );

Возвращает символ ch обратно в поток ввода, чтобы следующий извлеченный символ был ch.

Сначала очищает eofbit, затем ведет себя как UnformattedInputFunction. После создания и проверки объекта-сторожа, если rdbuf() не равен null, вызывает rdbuf()->sputbackc(ch), которое вызывает rdbuf()->pbackfail(ch), если ch не равно последнему извлеченному символу.

Если rdbuf() равно null или если rdbuf->sputbackc(ch) возвращает Traits::eof(), вызывает setstate(badbit).

В любом случае устанавливает счётчик gcount() в ноль.

Параметры

ch - символ для возврата в поток ввода

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

*this

Исключения

failure если произошла ошибка (флаг состояния ошибки не goodbit) и exceptions() задано бросать исключение для этого состояния.

Если внутренняя операция бросила исключение, оно перехватывается и устанавливается badbit. Если exceptions() задано для badbit, исключение перебрасывается повторно.

Пример

Демонстрирует разницу между изменяющим и неизменяющим putback().

#include <iostream>
#include <sstream>
 
int main()
{
    std::stringstream s1("Hello, world"); // IO stream
    s1.get();
    if (s1.putback('Y')) // modifies the buffer
        std::cout << s1.rdbuf() << '\n';
    else
        std::cout << "putback failed\n";
 
    std::cout << "--\n";
 
    std::istringstream s2("Hello, world"); // input-only stream
    s2.get();
    if (s2.putback('Y')) // cannot modify input-only buffer
        std::cout << s2.rdbuf() << '\n';
    else
        std::cout << "putback failed\n"; 
    s2.clear();
 
    std::cout << "--\n";
 
    if (s2.putback('H')) // non-modifying putback
        std::cout << s2.rdbuf() << '\n';
    else
        std::cout << "putback failed\n";
}

Вывод:

Yello, world
--
putback failed
--
Hello, world

См. также

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

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

Spec-Zone.ru

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