c++ 为什么打入字母会死循环 怎么解决

int main(){
int enter=0;
while(enter!=1&&enter!=2&&enter!=3&&enter!=4){
cout<<"Please select one of the following options:\n"
<<"1: Play\n"
<<"2: Help\n"
<<"3: Config\n"
<<"4: Quit\n"<<endl;
cin>>enter;
if(enter==1){
cout<<"you have selected play."<<endl;
}else if(enter==2){
cout<<"you have selected help."<<endl;
}else if(enter==3){
cout<<"you have selected config."<<endl;
}else if(enter==4){
cout<<"you have selected quit."<<endl;
}else if(enter>4||enter<1){
cout<<"your selection must be between 1 and 4!"<<endl;
}else {
cout<<"you have not entered a number!"<<endl;
return 0;

试图读取整数,没有读到,只要把输入缓冲区清空了继续读就可以了,
空格等也是字符,读整数包括浮点数时,如果有空白符会被跳过,但会不自动跳过非空白非数字字符,你得主动点,一句 cin.clear(); 就清空了全部...
或者你这里干脆不要用整型接收,直接用字符接收,比较时用字符,输入非期望字符时直接让重输入,不重画菜单
char enter;
...
while(1){
cout<<"Please select one of the following options:\n"
<<"1: Play\n"
<<"2: Help\n"
<<"3: Config\n"
<<"4: Quit\n"<<endl;
cin>>enter;

while(enter!='1'&&enter!='2'&&enter!='3'&&enter!='4') {cout<<"\b \b";cin>>enter;}

...
if(enter=='1')
...
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-12-02
代码没贴全吧 少俩右大括号
你这个条件判断可以换成switch语句
你输入字母的时候ener值改变了 而且符合判断条件 当然继续循环下去了追问

怎么解决这个问题

追答

说了你少大括号
你好好检查你的while循环,下面的语句不在循环体内啊,用大括号包起来

第2个回答  2012-12-02
cin 输入原理:
程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入.

int enter=0;//enter 为整形数据

在你输入 字母 按回车时时,cin 会认为enter 没有输入(非法输入),不会读取缓冲器的字母;
等下次再读时,发现缓冲区有数据进行读取,因为仍是字符型数据,便还是认为enter 没有输入,不会读取缓冲器的字母;因此无限循环本回答被提问者和网友采纳

c++ 为什么打入字母会死循环 怎么解决
试图读取整数,没有读到,只要把输入缓冲区清空了继续读就可以了,空格等也是字符,读整数包括浮点数时,如果有空白符会被跳过,但会不自动跳过非空白非数字字符,你得主动点,一句 cin.clear(); 就清空了全部...或者你这里干脆不要用整型接收,直接用字符接收,比较时用字符,输入非期望字符时直接让重...

...后输入数字循环正常,但输入字母就会陷入死循环呢?求解!
正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入.intenter=0;\/\/enter为整形数据在你输入字母按回车时时,cin会认为enter没有输入(非法输入),不会读取缓冲器的字母;等下次再读时,发现缓冲区有数据进行读取,因为仍是字符型...

C++程序问题,请大虾解答.为啥非法输入是数字这个程序正常,但是是字母之 ...
如果能正常退出,说明程序没有问题,是对的。因为你其它的非法输入所对应的ASCII码基本都不会是1,2,3,0,比如说大写字母好像是从65还是67开始的,小写字母是从97开始的,这些非0数在for循环中做条件判断时都是被认为是真值,所以会一直进循环 。要想实现你的意图,要么把choice改成char型,要么就...

C++新手求教,输入字母陷入死循环该怎么办?
把while (a!='q');改成while (1);。把cin >> a;cin >> b;cin >> c;三行改成if(!(cin >> a >> b >> c)) break;。

为什么这个C++程序 输入字母就成死循环了??
哈哈 太简单啦 因为字母不属于int值 字母是char值 输入字母永远达不到推出while loop的条件 所以就死循环了 一堆字快的要死刷新对吧

c++ 为什么打入字母会死循环 怎么解决 其中我还要判断enter这个是否在...
将enter定义为char不就行了,而且何必这么多的if else呢,直接switch多好

一段c++代码陷入死循环了,高手帮忙...
像这样进行输入判断就可以了.然后再在后面加上你的下面循环语句即可.int num=0; \/\/学生数目 do \/\/判断,只能输入1-10的数字 { cout<<"你有几个学生(1-10)?";cin>>num;\/\/这儿有个错误,惹输入的是字母,则程序会陷入死循环 if(num>10||num<1)cout<<"输入错误,你只能拥有至少1个,...

新手C++中 定义int型输入字母就会死循环 定义char型输入空格也会死循环...
年份不是数字的么?为什么要定义它为字符型呢?而Ascii计算我不清楚,呵呵,我只能记得一种公式计算~ 还有你定义字符数组,字节空间要足够大,还有特别注意的是输入命令。用gets();,他可以接纳空格。

看一段简单的C++代码!
原因是cin内部有一个“状态标志”,如果把一个字符输入给一个int,cin的>>操作符重载函数会把这个“状态标志”设置成某个非零的值(说明有一个错误发生)。cin的>>函数在内部的实现是这样的:在最开始的时候,会判断这个“状态标志”是否是个正常值(这个正常值是0),如果发现这个状态标志不是个正常...

c++关于eof()死循环问题
不能跳出循环是原因不在eof,在Length_rec函数里!!由于这个函数的while永远不会结束,导致了永远不可能return i,也就永远退不出eof。修改为\\ int Records::Length_rec(char a[]){ int i=0;while(a[i]!='\\0') \/\/这里修改了。i++;return i;} ...

相似回答