关于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;语句移到判断循环的语句,那么输入的如果是不合法的变量,他将跳出循环 。 展开
main()
{
int i;
while(i!=-1)
{
cout<<"i="
cin>>i; /*请输入不是一个字符如'a'试试*/
cout<<endl;
}
}
上面的程序,如果输入的不合法,那就将陷入死循环。解决的办法 有个一,把cin>>i;语句移到判断循环的语句,那么输入的如果是不合法的变量,他将跳出循环 。 展开
展开全部
当你在控制台输完数据敲回车后,输入的数据以及回车换行符被同时送到输入缓冲区,例如你输入的数据为a,然后回车,此时输入缓冲区中就有两个字符,一个是‘a’,一个是回车换行符‘/n’,接着程序读取,由于类型不匹配,读取失败,并没有读走输入缓冲区中的数据,也就是说,此时输入缓冲区中还是‘a’,和‘\n’,接着while循环继续读输入缓冲区,依然类型不匹配,于是就成了死循环
追问
那为什么把 cin>>i; 这个语句移到判断循环的语句,那么输入的如果是不合法的变量,他将跳出循环呢?
展开全部
"...cin在尝试将输入的字符串读为int型数据失败后,会生成一个错误状态。...流必须处于无错误状态,才能用于输入或输出。"
以上一段文字来自《C++ Primer》
至于输入流处于错误状态后,执行时将如何执行(cin>>i;)这一句,就不太清楚了。
从结果来看, 就像已经忽略掉这句的作用了。
以上一段文字来自《C++ Primer》
至于输入流处于错误状态后,执行时将如何执行(cin>>i;)这一句,就不太清楚了。
从结果来看, 就像已经忽略掉这句的作用了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用 fflush(stdin); 清除一下。
-----------------------------------
while(...)
{
cout<<"i=" ;
fflush(stdin); // 清除一下。
cin >> i;
while (cin.fail()) { // 检查输入错误
cin.clear();fflush(stdin); //// 清除一下。
cout <<"input 1 0" << endl;;
cin >> i;
}
}
-----------------------------------
while(...)
{
cout<<"i=" ;
fflush(stdin); // 清除一下。
cin >> i;
while (cin.fail()) { // 检查输入错误
cin.clear();fflush(stdin); //// 清除一下。
cout <<"input 1 0" << endl;;
cin >> i;
}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-10-01
展开全部
输入失败又不会导致输入的字符消失,下一次读入的还是同样的字符……
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询