C++ 中 cin缓冲的清除

       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);

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++cin.clear()函数用于清除cin流的错误状态。当cin流发生错误时(如输入不匹配的数据类型),cin流的错误状态位被设置为非零值。通过调用cin.clear()函数,可以将错误状态位复位为零,使流重新处于有效状态。 在引用的示例代码cin.clear()函数被用于将流重新设置为有效状态。在这个例子cin.clear()函数的调用之后紧接着是cin.sync()函数的调用。cin.sync()函数用于清空流的数据,确保输入流的错误数据被清除。在这个例子cin.sync()函数的调用可以被省略,因为只调用cin.clear()函数已经足够将流重新设置为有效状态。 在引用的示例代码cin.clear()函数的调用被注释掉了。因此,在读入要寻找的值时,cin流没有被清除,导致默认读入的str为上一次读入的数据,即数字5。这是错误的方式。 在引用的示例代码cin.clear()函数被用于清除错误状态。而cin.sync()函数则被用于清除缓冲的输入字符,因为之前的输入错误导致这些字符仍然留在缓冲。通过调用cin.sync()函数,可以确保输入的错误字符被清除掉。 综上所述,在C++,使用cin.clear()函数可以清除cin流的错误状态,使得流重新处于有效状态。而使用cin.sync()函数可以清除缓冲的错误字符。在具体使用时,通常先调用cin.clear()函数清除错误状态,然后再调用cin.sync()函数清除输入的错误字符。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值