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 |
См. также
| извлекает символы (публичный член-функция) |
|
| извлекает символы до тех пор, пока не будет найден заданный символ (публичный член-функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/io/basic_istream/ignore