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。在构造并检查哨兵对象后,它从流中提取字符并丢弃它们,直到以下任何条件发生
- 提取了 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
[编辑] 异常
如果内部操作抛出异常,则会捕获该异常并设置 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 |
[编辑] 参见
提取字符 (公共成员函数) | |
提取字符,直到找到给定字符 (公共成员函数) |