关于C++输入cin的问题,下面的程序,如果输入的不合法,那就将陷入死循环,为什么?如何理解?求高人指点

#include<iostream.h>main(){inti;while(i!=-1){cout<<"i="cin>>i;/*请输入不是一个字符如'a'试试*/cout... #include <iostream.h>
main()
{
int i;
while(i!=-1)
{
cout<<"i="
cin>>i; /*请输入不是一个字符如'a'试试*/
cout<<endl;
}
}
上面的程序,如果输入的不合法,那就将陷入死循环。解决的办法 有个一,把cin>>i;语句移到判断循环的语句,那么输入的如果是不合法的变量,他将跳出循环 。
展开
 我来答
Star1314JR
2013-10-01
知道答主
回答量:15
采纳率:0%
帮助的人:20.6万
展开全部
当你在控制台输完数据敲回车后,输入的数据以及回车换行符被同时送到输入缓冲区,例如你输入的数据为a,然后回车,此时输入缓冲区中就有两个字符,一个是‘a’,一个是回车换行符‘/n’,接着程序读取,由于类型不匹配,读取失败,并没有读走输入缓冲区中的数据,也就是说,此时输入缓冲区中还是‘a’,和‘\n’,接着while循环继续读输入缓冲区,依然类型不匹配,于是就成了死循环
追问
那为什么把  cin>>i; 这个语句移到判断循环的语句,那么输入的如果是不合法的变量,他将跳出循环呢?
追答

你的意思是写成while(cin>>i){},这样的话,当判断到输入缓冲区的数值的类型不匹配时,cin的方法就会返回一个布尔值fasle,就不再执行循环体了。我也测试过了,当输入不匹配时,确实是返回了0。

wanglz666
2013-10-01
知道答主
回答量:13
采纳率:0%
帮助的人:14万
展开全部
"...cin在尝试将输入的字符串读为int型数据失败后,会生成一个错误状态。...流必须处于无错误状态,才能用于输入或输出。"
以上一段文字来自《C++ Primer》
至于输入流处于错误状态后,执行时将如何执行(cin>>i;)这一句,就不太清楚了。
从结果来看, 就像已经忽略掉这句的作用了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
金色潜鸟
2013-10-01 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5725万
展开全部
用 fflush(stdin); 清除一下。
-----------------------------------
while(...)
{
cout<<"i=" ;
fflush(stdin); // 清除一下。
cin >> i;
while (cin.fail()) { // 检查输入错误
cin.clear();fflush(stdin); //// 清除一下。
cout <<"input 1 0" << endl;;
cin >> i;
}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-10-01
展开全部
输入失败又不会导致输入的字符消失,下一次读入的还是同样的字符……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式