istream::ignore()是如何工作的

How does istream::ignore( ) work?

本文关键字:工作 何工作 ignore istream      更新时间:2023-10-16

我在这里读到了关于istream::ignore()的文章。我想我已经了解了它所做函数的主要思想,但我看到了一些只接受使用该函数的数字输入的例子,我不确定它为什么有效。

为什么这个代码会忽略除数字输入之外的所有内容?

#include <iostream>
#include <sstream>
#include <limits>
int main()
{
    std::istringstream input("1n"
                             "some non-numeric inputn"
                             "2n");
    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()会忽略由某个数字指定的任何和所有字符,直到分隔符。。

input >> n;遇到非数字输入时,它会设置fail标志。该代码检查是否已设置(if (input.fail())),如果已设置,则忽略最多numeric_limits<streamsize>::max()个字符,直到遇到换行符n个字符。实际上,这意味着遇到故障的线路的其余部分将被忽略。

注意,这仍然将读取像"25 asdasf"这样的行的开头的数字。然而,如果该行是"25 asdfasf 26",则将读取25,但随后发生故障,并忽略该行的其余部分,包括末尾的26。