最終更新日時: 2026年02月20日 15時50分20秒 (JST)
Akira Takahashi が更新

履歴 編集

function
<istream>

# std::basic_istream::ignore

    basic_istream& ignore(streamsize n = 1, int_type delim = Traits::eof());  // (1)

    basic_istream& ignore(streamsize n, char_type delim);  // (2) C++26

## 概要

（非書式化入力関数）ストリームから文字を入力して捨てる。 入力ストリームから文字を入力する（読み取り位置を進める）が、それをプログラム上で利用しない場合にこの関数を使用できる。

入力して捨てる文字の数は、2通りの方法で指定できる。

- 文字数の上限を1番目の仮引数`n`で指定する。この指定が不要なら、`numeric_limits<streamsize>::max()`を実引数に与える。
- 2番目の仮引数`delim`を与えると、その文字が現れるまで入力して捨てる処理を実行する。この指定が不要なら、`Traits::eof()`を実引数に与える。

## 効果

(1) : 下記の動作を行う。

1. `sentry`オブジェクトを構築する。`sentry`オブジェクトが失敗を示した場合、何もしない。
2. 以下のいずれかを満たすまで、`this`内のストリームバッファから文字を入力する（どこへも出力することなく捨てる）。
   - 実引数で指定された`n`文字まで入力した。
     - `n == numeric_limits<streamsize>::max()`の場合、この条件は適用されない。
   - EOFに達した。この場合、ローカルエラー状態に`eofbit`を設定する。
   - 次に入力する文字が`delim`である。
     - 次の文字を`c`として、`Traits::eq_int_type(Traits::to_int_type(c), delim)`が真の場合。
     - `delim`が`Traits::eof()`である場合、この条件は適用されない。

(2) : 下記と等価

    return ignore(n, traits::to_int_type(delim));

## 戻り値

`*this`

## 例

    #include <iostream>
    #include <limits>

    int main() {
      // Cが入力されるまで捨てる。
      std::cin.ignore(std::numeric_limits<std::streamsize>::max(), 'C');

      int x;
      // 好きな数値を入力してください
      if (std::cin >> x) {
        std::cout << x << "が入力されました。" << std::endl;
      }
    }

### 入力

    ABC200

### 出力

    200が入力されました。

## 実装例

TBD

## バージョン

### 言語

- C++98

## 参照

- P1264R2 Revising the wording of stream input operations
  - C++23でローカルエラー状態の概念が導入され、入力関数のエラー処理セマンティクスが明確化された
- P3223R2 Making std::istream::ignore less surprising
  - C++26からオーバーロード(2)が追加された