C++中清空缓冲区的问题

intscore;do{cout<<"请输入您的分数:";cin>>score;}while(score<0||score>100);如果输入字符a,则会出现死循环,这是... int score;
do
{
cout<<"请输入您的分数:";
cin>>score;
}while(score<0||score>100);
如果输入字符a,则会出现死循环,这是为什么
int score;
do
{
cin.clear();
cout<<"请输入您的分数:";
cin>>score;
}while(score<0||score>100);
这样改为什么还是不可以?
方法一、用cin.getline()等方式提走缓冲区内容
do
{ cout<<"请输入您的分数:";
cin>>score;
cin.clear(ios::goodbit);
cin.getline(s,100); //char s[100];
}while(score<0||score>100);
方法二、使用函数cin.ignore()提取缓冲区内容
do
{ cout<<"请输入您的分数:";
cin>>score;
cin.clear(ios::goodbit);
cin.ignore(255 ,'\n');
}while(score<0||score>100);
方法三、使用函数cin.sync()清空输入缓冲区
do
{ cout<<"请输入您的分数:";
cin>>score;
cin.clear(ios::goodbit);
cin.sync();
}while(score<0||score>100);
这三种可行的方法是什么意思?看不懂啊~~~
展开
 我来答
忽忽上升
2014-06-14 · TA获得超过1911个赞
知道小有建树答主
回答量:1166
采纳率:70%
帮助的人:568万
展开全部
cin读取输入时,若输入类型不对,则会把failbit设置为1。而缓存内的内容不变,也就是说a一直在缓存中,cin一直读取,但读取错误。

cin.clear(ios::goodbit);只是把错误标志置为0,并没有清除缓存区内的内容。

方法一,则是读取缓存区内容,这样缓存内就没有a了
具体我也不是很懂,再研究研究cin究竟怎么工作的。

参考资料:http://zhidao.baidu.com/question/58822190.html
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
质凝映k
2014-06-14
知道答主
回答量:20
采纳率:0%
帮助的人:6.2万
展开全部
//因为你输入的不是一个整数,所以会变成死循环……
int main(int argc, char* argv[])
{
int score;//又或者你没有初始化这个变量↓
do
{
cin.clear();
cout<<"请输入您的分数:";
cin>>score;
}while(score>0||score<100);//注意大于小于符号↑
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
do______while
2014-06-14 · 超过16用户采纳过TA的回答
知道答主
回答量:44
采纳率:50%
帮助的人:26.3万
展开全部
int score;
do
{
cout<<"请输入您的分数:";
cin>>score;
}while(score<0||score>100);
字符型数据会被转化成8百多万,当然死循环了……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式