名前空間
変種
操作

std::basic_istream<CharT,Traits>::ignore

From cppreference.com
< cpp‎ | io‎ | basic istream
 
 
 
 
basic_istream& ignore( std::streamsize count = 1, int_type delim = Traits::eof() );

入力ストリームから、delim に達するまで、またはそれを超えるまで、文字を抽出して破棄します。

ignoreUnformattedInputFunction として動作します。セントリーオブジェクトを構築してチェックした後、ストリームから文字を抽出し、以下のいずれかの条件が発生するまで破棄します。

  • count 文字が抽出された場合。このテストは、countstd::numeric_limits<std::streamsize>::max() と等しい特殊なケースでは無効になります。
  • 入力シーケンスでファイルの終端条件が発生した場合。この場合、関数は setstate(eofbit) を呼び出します。
  • 入力シーケンスの次に利用可能な文字 cdelim である場合。これは Traits::eq_int_type(Traits::to_int_type(c), delim) によって決定されます。区切り文字は抽出されて破棄されます。このテストは、delimTraits::eof() の場合、無効になります。

目次

[編集] パラメータ

count - 抽出する文字数
delim - 抽出を停止する区切り文字。これも抽出されます。

[編集] 戻り値

*this

[編集] 例外

failure: エラーが発生した場合(エラー状態フラグが goodbit ではない)で、exceptions() がその状態に対してスローするように設定されている場合。

内部操作が例外をスローした場合、それはキャッチされ、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 に修正されました。

[編集] 関連項目

文字を抽出する
(public member function) [編集]
指定された文字が見つかるまで文字を抽出する
(public member function) [編集]
English 日本語 中文(简体) 中文(繁體)