在C++中 iostream类中的cin对象是 “智能” 的,意味着它可以根据变量的类型自动限制输入 ,当我们输入的数据为相对类型或者可以根据C++标准自动转换为需要的变量类型(int转换为double)并不会发生什么,但当输入的数据没有办法进行转换时(char无法转换为int),cin对象不但会拒绝以后的数据,而且本次输入由于输入类型错误也不会存到我们需要的变量中。
防止这种情况发生的措施是使用cin.clear(),把输入清空,这样我们可以进行下一次输入,以下是代码:
想要输入X个想要的数字,输入出现错误后继续输入:
#include<iostream>
using namespace std;
const int Max=5;
int main()
{
double factor[Max];
for(int i = 0 ; i < Max ; ++i)
{
while(!(cin >> factor[i]))
{
cin.clear();
while(cin.get() != '\n')
continue;
cout << "Bad input! Please enter a number:\n";
}
}
for(int i = 0 ; i < Max ; ++i)
cout << factor[i] << endl;
return 0;
}
在cin.clear()之后我们要把缓冲区里的留下的数据清除 最简单的方法就是用一个while去实现。
输入错误时停止:
#include<iostream>
using namespace std;
const int Max=5;
int main()
{
double factor[Max];
int i;
for(i = 0 ; i < Max ; ++i)
{
cin >> factor[i];
if(!cin)
{
cin.clear();
while(cin.get() != '\n')
continue;
cout << "Bad input! input process terminated.\n";
break;
}
}
for(int j = 0 ; j < i ; ++j)
cout << factor[j] << endl;
return 0;
}