一个关于clear()、吸收缓存区的帖子引发的思考
(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()、吸收缓存区的帖子引发的思考相关推荐
- scheduledexecutorservice 只执行一次_一个ScheduledExecutorService启动的Java线程无故挂掉引发的思考...
2018年12月12日18:44:53 案件现场 不久前,在开发改造公司一个端到端监控日志系统的时候,出现了一个bug:有个扫表写日志的线程无故挂掉. 顺藤摸瓜 我看了很久的代码,都没有想出来有什么地 ...
- 一个淘宝网店5皇冠卖家引发的思考
前几天我一个朋友叫我帮她装修一下淘宝店铺,我说以前不是装修过了吗?她说升级旺铺了,搞一下旺铺的装修...话题由此开了...06年的时候她还是钻石,后来发展起来,还开了实体店,广告牌也是让我们做的短短一 ...
- Node 文件操作,缓存区 Buffer 理解 ?
Node 读取文件 ? 1,Node 读取文件普通用法: // 1,导入文件模块 const fs = require('fs') // node 读写文件有同步和异步的接口, 默认为异步 // 同步 ...
- c语言设置一个8位缓存区程序,单片机 并口 控制爱普生打印机开发流程记录
最近做一个项目,需求是通过昆仑通态的组态触摸屏作为上位机监测数据,然后将数据整合最后打印报表输出.昆仑通态以前可以直接将预览页的所有数据都打印出来,包括整屏未显示完全的.但是现在昆仑通态将WIN平台换 ...
- 一个n人搜索的论坛精华帖子→网络(转)
<script type="text/javascript"> function fastreply(subject) { if($('postform')) { $( ...
- 套接字缓存区sk_buff
文章目录 数据结构 缓存区: sk_buff skb指针: sk_buff_data_t 协议头指针 缓存区队列: sk_buff_head skb共享信息: skb_shared_info 片段: ...
- 在内存中的显示缓存区中显示移动的汉字”中“字
源代码: assume cs:code,ds:data data segment DB 080H, 001H, 080H, 001H, 080H, 001H, 0FCH, 03FH, 0FCH, 03 ...
- mysql 缓存区_Mysql缓存的配置和使用
在mysql服务器高负载的情况下,必须采取一种措施给服务器减轻压力,减少服务器的I/O操作.一般采用的方法是优化sql操作语句,优化服务器的配置参数,从而提高服务器的性能.Mysql使用了几种内存缓存 ...
- java stringbuffer 转数组_JAVA之旅(十七)——StringBuffer的概述,存储,删除,获取,修改,反转,将缓存区的数据存储到数组中,StringBuilder...
JAVA之旅(十七)--StringBuffer的概述,存储,删除,获取,修改,反转,将缓存区的数据存储到数组中,StringBuilder 讲完String,我们来聊聊他的小兄弟 一.StringB ...
最新文章
- MyBatis Like
- 对文本框只允许输入数字
- Model层的两种写法
- jquery ajax 删除数据,JQuery ajax 保存数据,删除数据
- Java多线程之捕获异常
- 李宏毅机器学习课程4~~~分类:概率生成模型
- 阿里技术|Java 的这些坑,你踩到了吗?
- Go语言的三元表达式
- webservice 安全性 对外_WebService安全性的几种实现方法【身份识别】
- sqlserver:什么是数据库实例?
- cubase计算机音乐,Cubase与Nuendo电脑音乐制作从新手到高手 (200例)
- android 渠道排名,八大安卓渠道6月数据报告总汇
- 用CSS来实现一些动画在vue中使用之流星滑过(3)
- 【附源码】Python计算机毕业设计农田节水灌溉监测系统
- 【Computer Graphics】向量投影
- matlab根据根求多项式,matlab求解多项式的根
- android图片涂鸦,具有设置画笔,撤销,缩放移动等功能(一)
- EXTJS入门教程及其框架搭建
- HPE总裁兼CEO接受《财富》杂志专访
- 赵长鹏回复协助洗钱质疑; 欧洲通过区块链监管