需要输入验证建议

时间:2014-11-04 03:22:53

标签: c++ validation

我为班级完成了一项非常简单的作业。然而,我喜欢在盒子外面思考的那种人。

例如,user_input1和user_input2没有任何类型的验证。我可以输入" 11月"并且它不会捕获错误的数据类型错误。我对每个人的问题是,对于初始用户输入进行输入验证的最佳方式是什么?

// This program uses a function template.
   #include <iostream>
   #include <iomanip>
   #include <string>
   using namespace std;

// Template definition for square function.
   template <class T>
   T maximum (T number1 , T number2)
   {
     if ( number1 > number2)
     return number1;     
     else    
     return number2;
   }

   template <class S> 
   S minimum (S number1 , S number2)
   {
     if ( number1 > number2) 
     return number2;     
     else    
     return number1;
    }

 int main()
 {
 double user_input1 = 0; // To hold integer input
 double user_input2 = 0;
 int menu_choice = 0;

 cout << " Please Enter The First Number To Be Evaluated ";
 cin >> user_input1;

 cout << " Please Enter The Second Number To Be Evaluated ";
 cin >> user_input2;

 system ("cls");

 cout << " Your Entry Was As Followed   1: " << user_input1 << "  2: " <<user_input2;

 cout << "\n 1.   This Option Will Show You The Greater Argument ";

 cout << "\n 2.   This Will Show You The Lesser Argument ";

 cout << "\n  Your Menu Choice Is ";
 cin >> menu_choice;

 switch ( menu_choice )
 {
 case 1:
     cout << maximum (user_input1 , user_input2);
     break;
 case 2:
     cout << minimum (user_input1 , user_input2);
     break;
 defualt : 
     " INVALID ENTRY ";
 }
 system ("pause");
 return 0;
} 

1 个答案:

答案 0 :(得分:0)

您可以解析用户的输入并检查其是否正确。

当您将"November"提供给user_input1时,您可能会按此数组的第一个元素的整数地址初始化此数字(请在此处更正)。然后它将从double(可能)隐式转换为int

实施bool is_number(std::string const& input)功能,仅验证此代码中用户输入中的数字。您可以通过以下方式执行此操作(例如):

#include <assert.h>
#include <iostream>
// ... //
int main() {

  string input;

  cout << " Please Enter The First Number To Be Evaluated ";
  cin >> input;
  assert(is_number(input));
  double user_input1 = stod(input);

  cout << " Please Enter The Second Number To Be Evaluated ";
  cin >> input;
  assert(is_number(input));
  double user_input2 = stod(input);
  // ... //
}

通常,assert用于调试目的。 您可以使用if-else语句,并在用户输入不正确时写入错误消息。我在上面写的例子是因为它很简短。