重置错误输入?

name61 2008-04-09 09:41:26
			while (!(cin>>sa[i]))
{
cin.clear(); //重置输入
while (cin.get() != '\n')
continue; //解除错误的输入
cout<<"Please enter a double"<<"("<<(i+1)<<")"<<": ";
}


搞不懂为什么一定要加上,当然我去掉
while (cin.get() != '\n')
continue;

后肯定是不行的
有人能给我详细解释一下吗??
...全文
89 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
jieao111 2008-04-09
  • 打赏
  • 举报
回复
是的。。cin.clear()只是更正了cin.fail()
jieao111 2008-04-09
  • 打赏
  • 举报
回复

cin.clear();
fflush(stdin);

或者
 cin.clear();            
cin.sync();


清除缓冲区也行
name61 2008-04-09
  • 打赏
  • 举报
回复
是不是cin.clear();并没有清除'\n'啊
所以需要下面的语句过滤掉回车?
如果“回车”(或许有别的说法)没有被过滤掉,那么错误的输入将一直保留在输入队列中。。。
jieao111 2008-04-09
  • 打赏
  • 举报
回复
while (cin.get() != '\n')
continue;
可以退出你的错误循环
jieao111 2008-04-09
  • 打赏
  • 举报
回复
输入错误,一直在循环语句下,所以一直输出cout
name61 2008-04-09
  • 打赏
  • 举报
回复
还是没搞明白,有人能有汉语把我刚才列出的代码解释出来吗?

当我将那个去掉后,只要输入错误,程序会不停的显示cout的内容

为什么会这样呢?

不好意思啊,我就是这样喜欢研究一些SB问题
Supper_Jerry 2008-04-09
  • 打赏
  • 举报
回复
把所有输入的字符清空。
clear只是重置输入。并没有清空缓冲区
ttkk_2007 2008-04-09
  • 打赏
  • 举报
回复

while (cin>>sa[i])
{
cout<<"Please enter a double"<<"("<<(i+1)<<")"<<": ";
++i;
}

wuyn_1984 2008-04-09
  • 打赏
  • 举报
回复
当然 我是判断cin 接收类型错误
wuyn_1984 2008-04-09
  • 打赏
  • 举报
回复
我是用的
cin.clear();
cin.ignore();
wangya55 2008-04-09
  • 打赏
  • 举报
回复
具体的程序要求是什么啊?
wangya55 2008-04-09
  • 打赏
  • 举报
回复
判断是否能够输入的条件应该是输入不能够为空
即如果输入中有'\n'则重新输入
name61 2008-04-09
  • 打赏
  • 举报
回复
哈哈
明白了点
谢谢各位达人。。

65,106

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧