需要输入验证的建议

Need advice for input validation

本文关键字:验证 输入      更新时间:2023-10-16

我为我的班级完成了一项非常简单的作业。然而,我是那种喜欢跳出框框思考的人。

例如,user_input1和user_input2没有验证类型。我可以键入"November",它不会捕捉到错误的数据类型错误。我向每个人提出的问题是,对初始用户输入进行输入验证的最佳方式是什么

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

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

当您将"November"输入到user_input1时,您可能会通过该数组第一个元素的整数地址来初始化这个数字(请在此处更正)。然后它将从int隐式地转换为double(可能)。

实现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语句并编写错误消息。我之所以写上面的例子是因为它很短。