public member function
<istream> <iostream>

std::istream::ignore

istream& ignore (streamsize n = 1, int delim = EOF);
提取并丢弃字符
从输入序列中提取字符并丢弃它们,直到已提取 n 个字符,或有一个字符与 delim 比较相等。

该函数还会停止提取字符,如果到达文件结尾。如果过早到达文件结尾(在提取 n 个字符或找到 delim 之前),函数将设置 eofbit 标志。

在内部,该函数通过首先构造一个 sentry 对象(将 noskipws 设置为 true)来访问输入序列。然后(如果 good),它像调用其成员函数 sbumpcsgetc 一样,从其关联的流缓冲区对象中提取字符,最后在返回前销毁 sentry 对象。

参数

n
要提取(并忽略)的最大字符数。
如果此值等于 numeric_limits<streamsize>::max(),则没有限制:将提取尽可能多的字符,直到找到 delim(或文件结尾)。
streamsize 是一个带符号整型。
delim
定界字符:该函数会尽快停止提取字符,只要提取的字符与此字符比较相等。
请注意,定界字符也会被提取,因此下一个输入操作将继续处理其后的字符(如果存在)。
如果此值为文件结尾值(EOF),则没有字符会比较相等,因此将精确丢弃 n 个字符(除非函数失败或到达文件结尾)。

返回值

istream 对象 (*this)。

错误通过修改 *内部状态标志* 来发出信号。
flagerror
eofbit函数停止提取字符,因为输入序列没有更多可用字符(已到达 文件末尾)。
failbit构造sentry失败(例如,当流状态在调用之前不是good时)。
badbit流错误(例如,当此函数捕获由内部操作抛出的异常时)。
设置时,流的完整性可能已受到影响。
一次操作可能设置多个标志。

如果操作设置了已通过成员 exceptions 注册的内部状态标志,则函数将抛出成员类型为 failure 的异常。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// istream::ignore example
#include <iostream>     // std::cin, std::cout

int main () {
  char first, last;

  std::cout << "Please, enter your first name followed by your surname: ";

  first = std::cin.get();     // get one character
  std::cin.ignore(256,' ');   // ignore until space

  last = std::cin.get();      // get one character

  std::cout << "Your initials are " << first << last << '\n';

  return 0;
}

可能的输出
Please, enter your first name followed by your surname: John Smith
Your initials are JS


数据竞争

修改流对象。
并发访问同一流对象可能导致数据竞争,但标准流对象 cin 在其与 stdio 同步时除外(在这种情况下,不会引发数据竞争,尽管不保证提取的字符归属给线程的顺序)。

异常安全

基本保证:如果抛出异常,对象处于有效状态。
如果生成的错误状态标志不是 goodbit 且成员 exceptions 被设置为对此状态进行抛出,则抛出成员类型为 failure 的异常。
任何由内部操作抛出的异常都会被该函数捕获和处理,并设置 badbit。如果在上一次调用 exceptions 时设置了 badbit,则该函数将重新抛出捕获到的异常。

另见