我一直在阅读关于istream :: ignore()here。我认为我了解它的功能的主要思想,但我看到了一些使用此功能的例子accepting only numeric input,我不确定它为什么起作用。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 ::忽略()会忽略任何由一定数量的,直到定界符指定的所有字符..
嗯,它会忽略所有字符,直到找到''\ n''。 –
你最后一句描述了它。它会忽略尽可能多的字符,或者直到找到分隔符。你传递一个数字和一个分隔符。 – chris
我链接的例子说,它跳过非数字输入..因此,描述是错误的? – Ci3