命名空间
变体
操作

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

来自 cppreference.cn
< 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 <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++ 标准。

缺陷报告 应用于 发布时的行为 正确的行为
LWG 172 C++98 count 的类型被错误地指定为 int 更正为 std::streamsize

[编辑] 另请参阅

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