数字循环输入及错误解决办法
我们在输入一些数字的时候通常当输入的不是相应的类型的时候,会输入错误如
int a[5]={0};
int i=0;
while(i<5)
{
cin>>a[i];
i++;
}
当我们输入的是一个字符的时候,必然会输入错误,此时 cin 返回错误,不做处理,程序会停止.若我们在此之前输入了几个有效数据,我们想得到这几个数据怎么办呢?
//首先我们能让程序能够收到有效的数据并打印出来,下面为示例
int arr[5];
int i = 0;
cout << "输入第1个数:";
while (i<5 && (cin >> arr[i]))
{
if (++i<5)
cout << "输入第" << i + 1 << "个数:";
}
//******************错误处理**********************
if(!cin)
{
cin.clear();//重置cin,使我们能够继续进行
cin.get();//去读取我们输入的错误字符
}
cin.get();//等待我们输入ENTER
//***********************************************
for(int j=0;j<i;j++)
cout<<"第"<<j+1<<"个数:"<<arr[i]<<endl;
cout<<endl;
输入如下:此时若没有错误处理,必然直接程序闪退。
错误处理后如下
我们在输入错误数据后删除原来的错误,想再重新输入这个值怎么做呢?就像上面虽然能接收了前四个数据,但我们想要完整的5个数。
while (i < 5)
{
cout << "输入第"<<i+1<<"个数:";
//************处理函数***************
while (!(cin >> arr[i]))
{
cin.clear();
while (cin.get() != '\n')
continue;//这两行是来读取错误字符,知道读到换行符为止
cout << "重新输入数字:" ;
}
//**********************************
i++;
}
for (int j = 0; j<i; j++)
cout << "第" << j + 1 << "个数:" << arr[j] << endl;
效果如下: