ntjm.net
当前位置:首页 >> C++里Cin.ClEAr()重置输入之后,为什么还要用Cin.gEt(),来删除输入。 >>

C++里Cin.ClEAr()重置输入之后,为什么还要用Cin.gEt(),来删除输入。

楼主,您好,很高兴为您解答问题!希望能帮到你!以后有什么问题可以多多交流!呵呵!o(∩_∩)o~cin.clear(); //清除cin流的错误状态c++语句cin.clear();中的clear()是什么函数,原型是?答:检举将一个出错的流的状态恢复为“好”

有可能是因为有错误输入可以考虑cin>>后加cin.clear();也有可能是因为还有回车符在输入队列中,在cin>>后加cin.get()试试

截留上一次输入的回车符,不使用的话,回车符会保留到下一次输入,对循环中的getline()造成影响.

#include <iostream.h>#include <string>using namespace std;int main(){ cin.clear();//清除错误状态 char ch; while (cin.get(ch))//cin.get循环接收输入字符 { cout<<ch; } return 0;}//给你一个例子吧

中毒了吧!你的clear()调用不正确,应该把调用放到if复合语句里,你这样是无论输入是否有误都会调用clear()

cin>>ch;因为你的ch是char型的,如果用户输入的时候输入了不止一个字符再按回车,你这里会读掉一个字符,然后剩下的还在输入流中,会影响下次cin操作,所以要清空,以保证用户的错误输入也不会导致后续程序的故障.

get()是对象cin的一个成员函数, 用于吸收字符, 这里可以吸收掉回车. 否则回车也会被存储到字符数组a里面. 这就相当于C程序中的getchar(), 懂了吗?这里用一个getchar()和cin.get()效果一样, 不信你可以试一下..

if(!cin)判断是否输入正确,如果输入错误的类型 比如你想输入 int类型 结果输入了char 则会出现cin输入错误 fail() 被设定为真 failbit被设定 cin被标记错误 不可用( 意思是 出现不匹配 )然后就得用clear()清除错误状态 就是清除错误状态 (也就是把failbit设置为0)然后还得用 while(cin.get()!='\n') continue;吸收缓冲区 也就是错误字符后面的字符之类的 知道换行符 例如想输入 123 结果输入123ab456就用上面的做法 解决了 发现cin又可用了

1)关于缓冲区残余的回车符问题,需不需要用cin.get()把他读走,这个视下一次读取的方式而定,例如使用cin.getine()或者类似C输入的scanf(),put()等,那么就需要在读取之前清空残余缓存,如果使用cin 评论0 0 0

cin.get()是保留回车在输入流队列中的.而cin是丢弃回车的.ch=cin.get();是第一次输入,因为是刚开始,所以没有回车保留在输入流的队列中.这时你输入一个字符,然后回车.get()收到回车或空格或制表符就停止输入了.此时,输入流队

相关文档
网站首页 | 网站地图
All rights reserved Powered by www.ntjm.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com