关于C++ cin的问题

在学习过程中,发现cin 的一点问题以及解决方案,这里记录下来,和大家共同讨论。

我遇到的问题在于:cin 不能重复使用。什么意思呢?假如我用下列代码

int x,y;
while(cin>>x>>y)
...

当输入的不是int,while循环结束。我们经常使用这种方式去控制输入流。
但是如果这样,当你在之后还需要使用cin

int z;
cin>>z;

cin会失败,cin会直接被跳过

原因就是,当while循环结束时,也即 cin>>x>>y 失败时, cin会自动置为bad_bit(cin 有一个标记,标记输入流是否正常)
,也即cin失败

我原来是用 cin.clear() 函数,想要把bad_bit 重置为 good_bit,但是失败了,cin仍然失败。

网上查了并自己实践之后,给出了自己的解决方案

...
cin.clear();
cin.ignore(100,'\n');

首先把输入流的状态置为正常。然后忽略缓存区内的100个字符,或者直到回车’\n’ 前全部忽略。

原因:为什么cin.clear()不够呢,其实当你输入失败的时候,缓存区仍然保存了最后一次失败时输入的字符(假设为ch),也就是说,当你重置了输入流状态时,再次要求输入,系统会自动从缓存区提取ch,而这时的类型仍然不匹配。所以会再次失败。ignore会将缓存区的字符“忽略”,也即丢弃。100设为较大的数也可以。

有问题欢迎随时联系我~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值