C++中cin对象关于错误的处理

在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;
}

猜你喜欢

转载自blog.csdn.net/weixin_43705457/article/details/88386137