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

来自cppreference.com
< cpp‎ | io‎ | basic istream
 
 
 
 
basic_istream& ignore( std::streamsize count = 1, int_type delim = Traits::eof() );

从输入流提取并舍弃字符,直至并包含 delim

ignore 表现为无格式输入函数 (UnformattedInputFunction) 。构造并检查 sentry 对象后,它从流提取并舍弃字符,直到满足任一下列条件:

  • 输入序列中出现文件尾条件,此时会调用 setstate(eofbit)
  • 输入序列中的下个可用字符 cdelim,以 Traits::eq_int_type(Traits::to_int_type(c), delim) 确定。提取并舍弃分隔符。delimTraits::eof() 时不进行此测试。

参数

count - 要提取的字符数
delim - 提取停止处的分隔字符。也会被提取。

返回值

*this

异常

在出现错误(错误状态标志不是 goodbit)并且将 exceptions() 设置为对该状态抛出时会抛出 failure

如果内部操作抛出异常,那么捕获它并设置 badbit。如果对 badbit 设置了 exceptions(),那么就会重抛该异常。

示例

下列代码用 ignore 跳过非数值输入:

#include <iostream>
#include <sstream>
#include <limits>
 
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(); // 重置 failbit
            input.ignore(max_size, '\n'); // 跳过坏输入
        }
        else
            std::cout << n << '\n';
    }
}

输出:

1
2

缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 出版时的行为 正确行为
LWG 172 C++98 count 的类型被误指定为 int 改成 std::streamsize

参阅

提取字符
(公开成员函数)
持续提取字符,直到找到给定字符
(公开成员函数)