我是c ++的初学者,我无法理解cin.ignore&amp ;; cin.clear,他们对我毫无意义。当您向我解释时,请非常具有描述性
答案 0 :(得分:1)
在C ++输入处理中,如果最后cin.fail()
命令失败,cin
将返回true。
通常,cin.fail()
在以下情况下会返回true:
EOF
并尝试阅读任何内容,cin.fail()
都会返回true。 当cin.fail()
返回true并发生错误时,cin
的输入缓冲区将置于"错误状态"。该州将阻止进一步的输入处理。
因此,您必须使用cin.clear()
。它会覆盖流内部错误标志=>的当前值。所有位都被状态中的位替换,如果状态良好,则清除所有错误标志。
对于cin.ignore
,首先它将通过首先构造一个sentry
对象来访问输入序列。之后,它从其关联的流缓冲区对象中提取字符,就像调用其成员函数sbumpc
或sgetc
一样,最后在返回之前销毁该哨兵对象。
因此,它通常用于执行提取和丢弃字符。 cin.ignore
的经典案例是,当您在getline()
之后使用cin
时,它会在您的缓冲区中留下换行符,直到您切换功能为止。这就是为什么你必须从缓冲区中刷新换行符。
答案 1 :(得分:0)
std::cin.ignore()
可以通过三种不同的方式进行调用:
无参数:从输入缓冲区中取出一个字符并丢弃:
std::cin.ignore(); //discard 1 character
一个参数:指定的字符数从输入缓冲区中获取并丢弃:
std::cin.ignore(33); //discard 33 characters
两个参数:丢弃指定的字符数,或丢弃包含指定分隔符的字符(以先到者为准):
std::cin.ignore(26, '\n'); //ignore 26 characters or to a newline, whichever comes first
来源:http://www.augustcouncil.com/~tgibson/tutorial/iotips.html