项目场景:
温故而知新:C++学习cin函数,循环读取数据
问题描述
cin函数读取到错误的数据类型时,导致跳过之后所有的cin操作,导致陷入死循环。
void main(){
while(1)
{
int a = 1;
cout<<"请输入手机号:";
cin>>a; //3.14
cout<<"a ="<<a<<endl; //3
//多个便两个输入
int age=1 , hign = 1;
cout<<"请输入年龄和身高,以空格隔开:";
cin>>age>>hign; //18 80
cout<<"年龄 ="<<age<<endl; //18
cout<<"身高 ="<<hign<<endl; //80
}
}
原因分析:
cin函数数据类型限制不严谨
由于cin函数本身没有设置输入限制,所以在我们进行输入类型与我们新建变量的类型不一直的时候,导致cin的一个fail函数至于错误状态,并直接进入下一行代码,并忽略所有接下来cin函数直到程序结束
解决方案:
我们在输入的时候,自己加上输入类型判断,错误的话重新输入,这里要利用到两个函数
cin.clear()是用来更改cin的状态标示符的。
cin.ignore();//忽略掉缓冲区的内容,直到遇到EOF为止
int num;
string name;
cout<<"请输入一个整数:";
cin>>num;
while(cin.fail())
{
cin.clear();//清除cin的错误信息
cin.ignore();//忽略掉缓冲区的内容,置于EOF位置
int a = 1;
cout<<"请输入手机号:";
cin>>a; //3.14
cout<<"a ="<<a<<endl; //3
//多个便两个输入
int age=1 , hign = 1;
cout<<"请输入年龄和身高,以空格隔开:";
cin>>age>>hign; //18 80
cout<<"年龄 ="<<age<<endl; //18
cout<<"身高 ="<<hign<<endl; //80
}
cout<<"请输入姓名:";
cin>>string;
cout<<"输入完成"<<endl;
原因分析和解决方案参考了别的作者的作品。
参考文献:https://blog.csdn.net/jnzzls123/article/details/123740627