为什么输入字符会出现死循环?

来源:百度知道 编辑:UC知道 时间:2024/06/20 17:25:01
小生前些日子写了关于课程管理的小系统,要做人机交互自然要规定输入范围,比如输入成绩的时候要规定0-100,所以我写了一个类似与下面程序的一个函数。
int a;
while(1)
{
cin>>a;
if(a>=0&&a<=100) break;
else cout<<"error,print again!"<<endl;
}
当然输入 0-100间的任意一个数自然会跳出, 我试着输入-2,234等数字会让我重新输入,但是我输入 fasdf等字符时候 会出现死循环!!
请教大虾,怎么回事??谢谢了!
我那些字母是瞎打的 输入任意字符 都会出现死循环...

这是由cin>>a;这个语句决定的
由于定义了a是int类型,如果遇到cin不是int类型,则会出现异常,不会赋值给a,使其保持原值
你输入一个超出int类型的值,如5555555555555555555,也会出现上述情况。
以下两种方法测试通过

解决方法一:用一char来排除非法字符
#include<stdio.h>
int main(){
int a;
char b;
while(1)
{
scanf("%d",&a);
scanf("%c",&b);
if (b!='\n'){
printf("error,print again!\n");
do{
scanf("%c",&b);
}while(b!='\n');
continue;
}

if(a<0||a>100)
printf("error,print again!\n");
else
break;

}
return 0;
}

解决方法二:用数组
#include<iostream>
using namespace std;

int main(){
char a[3];
string b;
while(1)
{
a[0]=0;
a[1]=0;
a[2]=0;
cin>>a;

if(a[2]=='0'&&a[1]=='0'&&a[0]=='1')
break;

i