cin.clear()如何清除输入缓冲区?

时间:2013-12-30 01:56:35

标签: c++ io cin

根据我的阅读,cin.clear()重置了标志,但是如何清除输入缓冲区呢?

4 个答案:

答案 0 :(得分:3)

cin.clear()对输入缓冲区没有影响。正确阅读后,它会重置iostate标志(从技术上讲,用std::ios_base::goodbit替换当前值)

答案 1 :(得分:2)

如果可能,

std::ios::clear()仅重置错误标志。如果存在例如没有流缓冲器(即stream.rdbuf()产生nullptr),则std::ios_base::badbit仍然保持设置。这是唯一的影响。特别是,std::ios_base::clear()不会从输入缓冲区中删除任何字符。

如果需要从输入缓冲区中删除字符,则需要明确地执行此操作。例如,您可以使用

  • stream.ignore();无条件删除下一个字符(如果有的话;如果没有,则流将设置std::ios_base::eofbit。)
  • stream.ignore(std::numeric_limits<std::streamsize>::max(), '\n');删除所有字符,包括遇到的第一个'\n'字符。
  • 您可能需要ignore()个字符而stream.peek()会产生您不喜欢的字符类(例如isdigit(stream.peek())会产生false

答案 2 :(得分:1)

cin.clear()不清除缓冲区,它只覆盖标志的当前值。 有关详细信息,请访问此链接 - &gt; http://www.cplusplus.com/reference/ios/ios/clear/

你可以在这个链接中找到一个很好的例子 - &gt; http://web.eecs.utk.edu/~plank/plank/classes/cs102/Cin-Notes/

答案 3 :(得分:1)

确实cin.clear()对输入缓冲区没有影响,它只为流的内部错误状态标志设置一个新值。

如果您要清除“破坏”流的字符,则必须使用cin.ignore()(例如cin.ignore(10000,'\n');

您可以在此处找到一个很好的解释:http://www.arachnoid.com/cpptutor/student1.html