我为班级完成了一项非常简单的作业。然而,我喜欢在盒子外面思考的那种人。
例如,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;
}
答案 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
语句,并在用户输入不正确时写入错误消息。我在上面写的例子是因为它很简短。