C++ cin清空缓冲区的问题
下面是我的代码,当键盘输入的是5a时,程序就无限循环了,do语句块的最后两句根本不像网上说的可以清空缓冲区。请问这个问题要如何解决?#include<iostream.h...
下面是我的代码,当键盘输入的是5a时,程序就无限循环了,do语句块的最后两句根本不像网上说的可以清空缓冲区。请问这个问题要如何解决?
#include <iostream.h>
void main()
{ int nandu;
nandu = 0;
do{ cout<<"请选择难度:"<<endl;
cout<<"1.易:"<<endl;
cout<<"2.中:"<<endl;
cout<<"3.难:"<<endl;
cin>>nandu;
cin.clear();
cin.sync();
}
while(nandu < 1 || nandu > 3);
cin>>nandu;
cout<<nandu<<"dfe"<<endl;
} 展开
#include <iostream.h>
void main()
{ int nandu;
nandu = 0;
do{ cout<<"请选择难度:"<<endl;
cout<<"1.易:"<<endl;
cout<<"2.中:"<<endl;
cout<<"3.难:"<<endl;
cin>>nandu;
cin.clear();
cin.sync();
}
while(nandu < 1 || nandu > 3);
cin>>nandu;
cout<<nandu<<"dfe"<<endl;
} 展开
展开全部
#include <iostream.h>
void main() {
char nandu[15];
do {
cout<<"请选择难度:"<<endl;
cout<<"1.易:"<<endl;
cout<<"2.中:"<<endl;
cout<<"3.难:"<<endl;
cin>>nandu;
// cin.clear();
// cin.sync();
}while(nandu[0] < '1' || nandu[0] > '3');
// cin>>nandu;
cout<<nandu<<" dfe"<<endl;
}
追问
你这样改的前提是不是输入时手误小于14个字符,如果手误过长,仍然会有字符留在缓冲区。
追答
这是折中办法,当然也是有效的,代码提示只需输入1个数(1 -- 3),15个字符空间够用的,如果人为故意折腾,可将代码修改如下:
#include <iostream.h>
#include <cstdio>
#include <cstring>
void main() {
char nandu[5];
do {
cout<<"请选择难度:"<<endl;
cout<<"1.易:"<<endl;
cout<<"2.中:"<<endl;
cout<<"3.难:"<<endl;
cin.getline(nandu,4);
if(strlen(nandu) > 1)
while(cin.get() != '\n');
// cin.clear();
// cin.sync();
}while(nandu[0] < '1' || nandu[0] > '3');
// cin>>nandu;
cout<<nandu<<" dfe"<<endl;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
fflush(stdin);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询