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 に達するまで、またはそれを超えるまで、文字を抽出して破棄します。
ignore は UnformattedInputFunction として動作します。セントリーオブジェクトを構築してチェックした後、ストリームから文字を抽出し、以下のいずれかの条件が発生するまで破棄します。
- 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
[編集] 例外
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) |