当我们需要一个整型输入 ,但是实际输入为其他类型时。
#include <iostream>
#include <exception>
using namespace std;
int main(void){
using std::cout;
using std::cin;
int input;
while (1)
{
cin >> input;
cout << "input\n" << input << std::endl;
cout << "successful" << std::endl;
}
return 0;
}
输入hh , 发现循环打印 ,
successful
input
0
原因在于cin 在读取错误的数据类型 , 将会设置failbit 但是不会从输入缓冲区取出数据 , 可以通过cin.good() 来检测是否读取到正确的数据类型,没有则将其从缓冲区中取出。
#include <iostream>
#include <exception>
using namespace std;
int main(void){
using std::cout;
using std::cin;
int input;
while (1)
{
cin >> input;
if(cin.good()){
cout << "input\n" << input << std::endl;
cout << "successful" << std::endl;
}
else{
getchar();
cin.clear();
}
}
return 0;
}