(1)办法1:当你strm.clear()后流仍然不能用的时候,那么加一句

while(cin.get() != '\n'),那么会自动把缓存器读完。这样流就可以继续使用了。strm表示流(e.g.iostream、istream、istringstream、ifstream、fstream,etc..)。

(2)办法2:当你的流发生错的时候,即使执行了strm.clear()后,也未必可以使用,这是因为这个流还会跑去缓存区去读那个错误的东西,当然会继续引发错误了。所以执行strm.clear()后,必须马上执行清楚缓存,比如cin.ignore(100,'\n')表示读取100个字符或者遇到'\n'后结束。

cin.ignore(a,b)表示:一直从cin中读取,一直读取到a个数据或者遇到字符b的时候结束。。。

c++ cin.clear()到底是什么意思呢
int i;
for(i=0;i<num;i++)
{
int temp;
cout<<"Please input the # "<< (i+1)<<" number: "<<endl;
cin>>temp;
if(!cin)
{
cin.clear();
while(cin.get()!='\n')
continue;
cout<<"Bad input"<<endl;
break;
}
else if(temp<0)
break;
array[i]=temp;

能不能详细地解释一下if(!cin)
{
cin.clear();
while(cin.get()!='\n')
continue;
cout<<"Bad input"<<endl;
break;
}
这段语句里if(!cin),clear()和while的那条语句到底是干什么的呢,为什么一定要while和clear的那条语句呢,求解求解,谢谢

4个回答#热议# 闰四月究竟是怎么推算的?
南瓜苹果i
2020-05-17
当cin函数输入错误的时候,cin里面有个函数可以自动检测到输入错误,若想继来续输自入便要清楚掉这个错误。可以利用函数cin.rdstate()函数来读取错误的标识符看看。
#include <iostream>using namespace std;int main(){

int number;

cin>>number;

cout<<"first input"<<endl;

cout<<cin.rdstate()<<endl;

cin>>number;
cout<<"end input!bai"<<endl;

system("pause");

return 0;}

扩展资料

c++中的cin函数语法

C++中的cin函数和C语言的scanf函数同理,均为从键盘中接收输入内容。

基本格式:cin>>要输入的du内容;

cin函数输入遇到空格,TAB键,回车也会终止输入
例如:想要zhi输入zhang san

cin>>str;那么str只会接收zhang这个字符串,遇到空格自动结束输入。

C++中提供cin.getline(str,50),此时只遇到回车才会结dao束输入,那么str中存储了zhang san这个完整的字符串。

抢首赞    评论 分享 举报收起
匿名用户
推荐于2017-11-24
if(!cin)判断是否输入2113正确,如果输入错误的类型 比如你想输入 int类型 结果输入了char 则会出现5261cin输入错误
fail() 被设定为真 failbit被设定 cin被标记错误 不可用( 意思是4102 出现不匹配 )然后就得用clear()清除错误状1653态 就是清除错误状态 (也就是把failbit设置为0)然后还得用 while(cin.get()!='\n')
continue;
吸收缓冲区 也就是错误字符后版面的字符之类的 知道换行符 例如想输入 123 结果输入123ab456。。。就用上面的做法 解决了 发现cin又可用了权。。。
更多追问追答
追问
就是说如果输入123ab456的话,首先会接受到123,然后if(!cin)发现不是匹配的类型,出错,failbit被设定了,然后用clear()把被设定的failbit修改到原来的状态,接着继续接受456,直至遇到换行?所谓的while(cin.get()!='\n')吸收缓冲区是指?
追答
哦 是这样的 因为遇到了a所以会把cin的failbit设定为1  所以会出现cin错误 所以ab456依然留在缓冲区 (因为cin是靠缓冲区读取的 其中123ab456从键盘输入保存在缓冲区) 用clear() 清除的 是状态 也就是failbit 设置为0 让 cin可用 但是如果不清除缓冲区 则在读取缓冲区的a时 又被设定failbit=1 所以 只能用while(cin.get()!='\n') 去读取掉剩下的缓冲区 直至遇到换行 (也就是读取ab456和\n 直到退出while)这样就可用cin继续从键盘到缓冲区 中读取int了

注意一点:你想不是正确的(failbit被设定了,然后用clear()把被设定的failbit修改到原来的状态,接着继续接受456) 不是这样的 cin不会这样读取 应该是清除状态 只是让它可用  他还会继续去读ab456  但是继续碰到'a’还是设置 failbit=1 不会跳过ab去读456

fergus1987
2019-09-03fergus1987
采纳数:5 获赞数:17LV5
擅长:电脑/网络 电子数码 娱乐休闲 资源共享
向TA提问 私信TA
实际测试来了一下楼上大神的解源答思路发现一些问题:
输入字母开头时 例如baia123 b456 代码会报错“Bad input”
但当数字du开头连接字母时 例如zhi123a 4bc 代码正常运行 不会报错
大家可以试dao试
 1    评论(1) 分享 举报
隰有苓3点14159
2018-11-01
非常感谢,在读C++ Primer也碰到此问题
 9    评论 分享 举报

一个关于clear()、吸收缓存区的帖子引发的思考相关推荐

  1. scheduledexecutorservice 只执行一次_一个ScheduledExecutorService启动的Java线程无故挂掉引发的思考...

    2018年12月12日18:44:53 案件现场 不久前,在开发改造公司一个端到端监控日志系统的时候,出现了一个bug:有个扫表写日志的线程无故挂掉. 顺藤摸瓜 我看了很久的代码,都没有想出来有什么地 ...

  2. 一个淘宝网店5皇冠卖家引发的思考

    前几天我一个朋友叫我帮她装修一下淘宝店铺,我说以前不是装修过了吗?她说升级旺铺了,搞一下旺铺的装修...话题由此开了...06年的时候她还是钻石,后来发展起来,还开了实体店,广告牌也是让我们做的短短一 ...

  3. Node 文件操作,缓存区 Buffer 理解 ?

    Node 读取文件 ? 1,Node 读取文件普通用法: // 1,导入文件模块 const fs = require('fs') // node 读写文件有同步和异步的接口, 默认为异步 // 同步 ...

  4. c语言设置一个8位缓存区程序,单片机 并口 控制爱普生打印机开发流程记录

    最近做一个项目,需求是通过昆仑通态的组态触摸屏作为上位机监测数据,然后将数据整合最后打印报表输出.昆仑通态以前可以直接将预览页的所有数据都打印出来,包括整屏未显示完全的.但是现在昆仑通态将WIN平台换 ...

  5. 一个n人搜索的论坛精华帖子→网络(转)

    <script type="text/javascript"> function fastreply(subject) { if($('postform')) { $( ...

  6. 套接字缓存区sk_buff

    文章目录 数据结构 缓存区: sk_buff skb指针: sk_buff_data_t 协议头指针 缓存区队列: sk_buff_head skb共享信息: skb_shared_info 片段: ...

  7. 在内存中的显示缓存区中显示移动的汉字”中“字

    源代码: assume cs:code,ds:data data segment DB 080H, 001H, 080H, 001H, 080H, 001H, 0FCH, 03FH, 0FCH, 03 ...

  8. mysql 缓存区_Mysql缓存的配置和使用

    在mysql服务器高负载的情况下,必须采取一种措施给服务器减轻压力,减少服务器的I/O操作.一般采用的方法是优化sql操作语句,优化服务器的配置参数,从而提高服务器的性能.Mysql使用了几种内存缓存 ...

  9. java stringbuffer 转数组_JAVA之旅(十七)——StringBuffer的概述,存储,删除,获取,修改,反转,将缓存区的数据存储到数组中,StringBuilder...

    JAVA之旅(十七)--StringBuffer的概述,存储,删除,获取,修改,反转,将缓存区的数据存储到数组中,StringBuilder 讲完String,我们来聊聊他的小兄弟 一.StringB ...

最新文章

  1. MyBatis Like
  2. 对文本框只允许输入数字
  3. Model层的两种写法
  4. jquery ajax 删除数据,JQuery ajax 保存数据,删除数据
  5. Java多线程之捕获异常
  6. 李宏毅机器学习课程4~~~分类:概率生成模型
  7. 阿里技术|Java 的这些坑,你踩到了吗?
  8. Go语言的三元表达式
  9. webservice 安全性 对外_WebService安全性的几种实现方法【身份识别】
  10. sqlserver:什么是数据库实例?
  11. cubase计算机音乐,Cubase与Nuendo电脑音乐制作从新手到高手 (200例)
  12. android 渠道排名,八大安卓渠道6月数据报告总汇
  13. 用CSS来实现一些动画在vue中使用之流星滑过(3)
  14. 【附源码】Python计算机毕业设计农田节水灌溉监测系统
  15. 【Computer Graphics】向量投影
  16. matlab根据根求多项式,matlab求解多项式的根
  17. android图片涂鸦,具有设置画笔,撤销,缩放移动等功能(一)
  18. EXTJS入门教程及其框架搭建
  19. HPE总裁兼CEO接受《财富》杂志专访
  20. 赵长鹏回复协助洗钱质疑; 欧洲通过区块链监管

热门文章

  1. plsql cursor 函数
  2. 优雅的让Fragment监听返回键
  3. 合并要素--how to use ConstructUnion
  4. [Python图像处理] 三十.图像量化及采样处理万字详细总结(推荐)
  5. [Python图像处理] 九.形态学之图像开运算、闭运算、梯度运算
  6. Swift之五个让Swift代码更加优雅的扩展
  7. 343. Integer Break
  8. 深度学习——02、深度学习入门——卷积神经网络
  9. Vue.js项目新建及目录结构分析
  10. 【MFC】根据菜单创建工具栏