Spec-Zone.ru › C++

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

basic_istream& ignore( std::streamsize count = 1, int_type delim = Traits::eof() );

Извлекает и отбрасывает символы из входного потока до и включая delim.

ignore ведет себя как UnformattedInputFunction. После создания и проверки объекта-сторожа, она извлекает символы из потока и отбрасывает их, пока не выполнится одно из следующих условий:

  • Были извлечены count символов. Это условие отключено в специальном случае, когда count равно std::numeric_limits<std::streamsize>::max().
  • Входная последовательность достигает конца файла, в этом случае функция вызывает setstate(eofbit).
  • Следующий доступный символ c в входной последовательности является delim, как определено Traits::eq_int_type(Traits::to_int_type(c), delim). Разделительный символ извлекается и отбрасывается. Это условие отключено, если delim равно Traits::eof().

Параметры

count - количество символов для извлечения
delim - разделительный символ, по которому останавливается извлечение. Он также извлекается

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

*this

Исключения

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

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

Пример

Следующий пример использует ignore для пропуска нечисловых входных данных:

#include <iostream>
#include <limits>
#include <sstream>
 
constexpr auto max_size = std::numeric_limits<std::streamsize>::max();
 
int main()
{
    std::istringstream input("1\n"
                             "some non-numeric input\n"
                             "2\n");
    for (;;)
    {
        int n;
        input >> n;
 
        if (input.eof() || input.bad())
            break;
        else if (input.fail())
        {
            input.clear(); // unset failbit
            input.ignore(max_size, '\n'); // skip bad input
        }
        else
            std::cout << n << '\n';
    }
}

Вывод:

1
2

Отчеты об ошибках

Следующие отчеты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применён к Поведение, как опубликовано Корректное поведение
LWG 172 C++98 тип count был неправильно указан как int исправлено на std::streamsize

См. также

get
извлекает символы
(публичный член-функция)
getline
извлекает символы до тех пор, пока не будет найден заданный символ
(публичный член-функция)

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

Spec-Zone.ru

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