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,則該函式將重新丟擲捕獲到的異常。

另見