我想忽略cin
中的所有字符,以便在此答案中清除cin
:How 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?为什么我必须提供分隔符?
答案 0 :(得分:4)
ignore
函数名称有点误导。它实际上是什么读取和丢弃输入,直到找到终结符。这是一个阻止阅读。
在您的情况下,您使用cin
(默认情况下为stdin
)的任何输入流都不会传递文件结束条件,因此ignore
的读取/ {永远丢弃循环块。