std::basic_istream<CharT,Traits>::ignore
来自cppreference.com
| |
||
从输入流提取并舍弃字符,直至并包含 delim。
ignore 表现为无格式输入函数 (UnformattedInputFunction) 。构造并检查 sentry 对象后,它从流提取并舍弃字符,直到满足任一下列条件:
- 已提取
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
异常
在出现错误(错误状态标志不是 goodbit)并且 exceptions() 已设置为对该状态抛出时,会抛出 failure。
如果内部操作抛出了异常,那么捕获它并设置 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(); // 重置 failbit
input.ignore(max_size, '\n'); // 跳过坏输入
}
else
std::cout << n << '\n';
}
}
输出:
1
2
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
| 缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
|---|---|---|---|
| LWG 172 | C++98 | count 的类型被误指定为 int
|
改成 std::streamsize |
参阅
| 提取字符 (公开成员函数) | |
| 持续提取字符,直到找到给定字符 (公开成员函数) |