私はここでistream::ignore()について読んでいます。私はそれが行う関数の主なアイデアを理解していると思いますが、この関数を使用する数値入力のみを受け入れる例をいくつか見てきました。なぜそれが機能するのかわかりません。
なぜこのコードは数値入力以外のすべてを無視するのでしょうか?
#include <iostream>
#include <sstream>
#include <limits>
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(std::numeric_limits<std::streamsize>::max(), '\n'); // skip bad input
} else {
std::cout << n << '\n';
}
}
}
istream :: ignore()は、区切り文字まで特定の数字で指定されたすべての文字を無視すると思っていました。