关于C++ cin的问题

来源:互联网 发布:软件技术服务 编辑:程序博客网 时间:2024/05/04 21:10

在学习过程中,发现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 0
原创粉丝点击