cin输入流重置问题
c4droid吧
全部回复
仅看楼主
level 7
天1102蓝
楼主
最近写的学生成绩管理系统,期中有一段判断输入值是否符合要求的代码:
int flag=0;
while(1){
while(cin>>flag)
{
if ()
……
else if()
……
//这里面有跳出循环的语句
}
cout<<“输入值无效,请重新输入!”;
cin.clear();//重置cin流
}
然后我就发现只要有一次输入值是错的,它就会一直输出“输入值无效,请重新输入!”
不知道怎么破
2017年11月27日 14点11分
1
level 1
戽疙
楼主,我也是最近写了个学生成绩管理系统,对输入异常处理时,用到了cin.clear(),但是用vs做是死循环,而用CB做又能行。 不知道楼主解决这个问题没?如果解决了,能不能分享一下啊?困扰几天了... 给楼主顶一下!
2017年12月04日 13点12分
3
天1102蓝
没解决,试了好多方法都没用
2017年12月05日 04点12分
天1102蓝
可以去知乎看看这个zhihu.com/😁question/😁53934791
2017年12月06日 01点12分
戽疙
嗯 现在已经解决了 ,谢谢
2018年01月30日 06点01分
level 9
飞舞云尖
if(cin)判断是否输入正确,如果输入错误的类型 比如你想输入 int类型 结果输入了char 则会出现cin输入错误
fail() 被设定为真 failbit被设定
cin被标记错误, 不可用( 意思是 出现不匹配 )。然后就得用clear()清除错误状态 就是清除错误状态 (也就是把failbit设置为0)然后还得用 while(cin.get()!='\n');
2017年12月05日 11点12分
5
天1102蓝
为什么还要cin.get()!='\n'?
2017年12月06日 01点12分
level 9
飞舞云尖
clear()只是清除错误记录。
get()才把缓冲读走。
2017年12月06日 02点12分
6
level 4
南屏晚风✨
cin.sync()才是清空缓冲区的方法
参考:p
http://blog.sina.cn/dpool/blog/s/blog_8d3652760100wl9r.html
2018年01月31日 13点01分
7
1