直到EOF才能cin.ignore?

时间:2015-02-20 16:01:32

标签: c++ delimiter cin flush ignore

我想忽略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());

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

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

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

1 个答案:

答案 0 :(得分:4)

ignore函数名称有点误导。它实际上是什么读取丢弃输入,直到找到终结符。这是一个阻止阅读。

在您的情况下,您使用cin(默认情况下为stdin)的任何输入流都不会传递文件结束条件,因此ignore的读取/ {永远丢弃循环块。