命名空间
变体
操作

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。在构造并检查哨兵对象后,它从流中提取字符并丢弃它们,直到以下任何条件发生

  • 输入序列中发生文件结尾条件,在这种情况下,函数会调用 setstate(eofbit)
  • 输入序列中的下一个可用字符 cdelim,由 Traits::eq_int_type(Traits::to_int_type(c), delim) 确定。分隔符字符将被提取并丢弃。如果 delimTraits::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

[编辑] 参见

提取字符
(公共成员函数) [编辑]
提取字符,直到找到给定字符
(公共成员函数) [编辑]