天狼紫枫

C++博客 首页 新随笔 联系 聚合 管理
  2 Posts :: 2 Stories :: 4 Comments :: 0 Trackbacks
在cin>><int/float>时 如果我们输入一个字符 就会导致刷屏的结果 这是因为非数字字符无法被cin接收而一直停留在缓冲区,导致下一次cin时直接从缓存读数 但字符无法读取结果导致无限循环 这被很多人认为成库的bug

解决方法:

1> 在cin>><int/float>后加cin.ignore();  cin.clear();

cin.ignore()方法cin.ignore(   5,   'c'   )   的是从输入流(cin)中提取字符,提取的字符被忽略(ignore),不被使用。每抛弃一个字符,它都要计数和比较字符:如果计数值达到5或者被抛弃的字符是'c',则cin.ignore()   函数执行终止;否则,它继续等待。  它的一个常用功能就是用来清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响。比如可以这么用:cin.ignore(   1024,   '\n'   );,通常把第一个参数设置得足够大,这样实际上总是只有第二个参数   '\n'   起作用,所以这一句就是把回车(包括回车)之前的所以字符从输入缓冲(流)中清除出去。

cin.clear用法如果输入发生错误发生,那么流状态既被标记为错误,你必须清除这些错误状态,以使你的程序能正确适当地继续运行。要清除错误状态,需使用clear()函数。此函数带一个参数,它是你将要设为当前状态的标志值。,只要将ios::goodbit作为实参。

2> 在cin>><int/float>后加fflush(stdin);(需要stdio.h)

fflush(stdin)刷新标准输入缓冲区

posted on 2007-06-27 18:33 徐光宇 阅读(729) 评论(0)  编辑 收藏 引用 所属分类: C/C++笔记

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理