不能 cin.ignore 直到 EOF?

Cannot cin.ignore till EOF?

我想忽略 cin 中的所有字符以刷新此答案中的 cinHow to get rid of bad input one word at a time instead of one line at a time?

但是我发现如果我写:

程序好像挂了等待输入
cin.ignore(std::numeric_limits<std::streamsize>::max());

如果我使用 '\n' 分隔符,它会正确刷新 cin

cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

我的问题是,为什么我不能忽略直到 EOF?为什么我必须提供分隔符?

ignore 函数名称有点误导。它实际上做了什么 readdiscard 输入,直到找到终止符。这是阻塞读取。

在您的情况下,无论您使用 cin(默认情况下是 stdin)的任何输入流都不会提供文件结束条件,因此 ignore read/discard 循环永远阻塞。