C++中的cin函数在输入类型错误时会导致意外的bug
例子:比如我们新建一个整型变量,使用了cin函数接收输入,如果输入的不是整型数据会导致程序错误
例如:
int num;
string name;
cout<<"请输入一个整数:";
cin>>num;
cout<<"请输入姓名:";
cin>>string;
cout<<"输入完成"<<endl;
第一次要求输入整数,而我们假如输入一个汉字或者一个字符的时候,会产生一个bug,导致程序跳过下面的所有cin.直接运行到程序尾部
原因分析:
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位置
cout<<"请输入正确的数字(整型):";
cin.ignore();//EOF位置,接收下一个cin函数
cin>>num;
}
cout<<"请输入姓名:";
cin>>string;
cout<<"输入完成"<<endl;
这里用两个cin.ignore(),在测试的时候使用了一个cin.ignore()的时候会导致第一次循环依旧忽略cin函数,直到第二次才会访问,因此要用两次来解决这个问题