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);
这三种可行的方法是什么意思?看不懂啊~~~ 展开
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);
这三种可行的方法是什么意思?看不懂啊~~~ 展开
3个回答
展开全部
cin读取输入时,若输入类型不对,则会把failbit设置为1。而缓存内的内容不变,也就是说a一直在缓存中,cin一直读取,但读取错误。
cin.clear(ios::goodbit);只是把错误标志置为0,并没有清除缓存区内的内容。
方法一,则是读取缓存区内容,这样缓存内就没有a了
具体我也不是很懂,再研究研究cin究竟怎么工作的。
参考资料:http://zhidao.baidu.com/question/58822190.html
cin.clear(ios::goodbit);只是把错误标志置为0,并没有清除缓存区内的内容。
方法一,则是读取缓存区内容,这样缓存内就没有a了
具体我也不是很懂,再研究研究cin究竟怎么工作的。
参考资料:http://zhidao.baidu.com/question/58822190.html
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
//因为你输入的不是一个整数,所以会变成死循环……
int main(int argc, char* argv[])
{
int score;//又或者你没有初始化这个变量↓
do
{
cin.clear();
cout<<"请输入您的分数:";
cin>>score;
}while(score>0||score<100);//注意大于小于符号↑
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int score;
do
{
cout<<"请输入您的分数:";
cin>>score;
}while(score<0||score>100);
字符型数据会被转化成8百多万,当然死循环了……
do
{
cout<<"请输入您的分数:";
cin>>score;
}while(score<0||score>100);
字符型数据会被转化成8百多万,当然死循环了……
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询