C++ 中 cin缓冲的清除

来源:互联网 发布:sql注入攻击测试工具 编辑:程序博客网 时间:2024/06/05 01:59

       cin是istream的一个对象,而istream继承自basic_istream,所以cin拥有basic_istream的所有成员。因为cin是一个输入流,一些问题只能在运行台的时候才能够出现,比如当要求给一个整型复制的时候,输入的有可能是其他类型或者溢出了,这样在运行台的时候就会导致程序退出,或者造成其他方面的影响,比如如果输入的过多了,那除了赋给变量的 那些输入之外还有剩余的,这些剩余的输入将残留在输入缓存中,就会导致在下面需要输入的时候不再接受输入,而直接从缓存中获得,这就要求我们有这样的判断,判断是否输入正确,如果输入不正确就要进行相应的处理。

        首先判断cin流是否正常,可以通过if(cin),来判断是不是类型正确,输入合法,cin.fail(),判断是否失败,如果失败,当前操作无影响,接下来的输入则不能进行,设置failbit为1,cin.bad()判断流是否破坏,如果流已经破话,那么任何输入也无效了。cin.good(),判断是否正常,如果正常,接下来的操作还能继续。

      如果确定cin不正常,那就得把缓存中的数据清空,还得把各个标志位清除,清除标志位的函数为cin.clear(),清除缓存可以使用flushall(),将所有缓存清除也可以把指定的流缓存清除,清除指定缓存流的方法是fflush(stdin);

原创粉丝点击