我有多个枚举,它们的作用就像程序的设置。我想从用户输入中一个接一个地获取它们,并不断要求用户输入某个设置,直到给出有效的输入,但我觉得我的方法重复了很多代码。有更好/更聪明的方法吗?
代码:
#include <iostream>
#include <limits>
enum Input1 {Type1 = 1, Type2 = 2, Type3 = 3, Type4 = 4};
enum Input2 {Type11 = 5, Type22 = 17};
bool validate_input(Input1 input1, Input2 input2 = Type11) {
if(input1 != Type1 && input1 != Type2 && input1 != Type3 && input1 != Type4) {
return false;
}
if(input2 != Type11 && input2 != Type22) {
return false;
}
return true;
}
int main()
{
int iInput1, iInput2, iInput3;
Input1 eInput1;
Input2 eInput2;
bool return_val;
do {
std::cout << "Select option: 1. 2. 3. 4.";
std::cin >> iInput1;
if (std::cin.fail()) {
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
eInput1 = (Input1) iInput1;
return_val = validate_input(eInput1);
if (!return_val) {
std::cout << "Invalid input!\n";
}
} while (!return_val);
do {
std::cout << "Select option: 1. 2.";
std::cin >> iInput2;
if (std::cin.fail()) {
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
eInput2 = (Input2) iInput2;
return_val = validate_input(eInput1, eInput2);
if (!return_val) {
std::cout << "Invalid input!\n";
}
} while (!return_val);
return 0;
}
字符串
1条答案
按热度按时间envsm3lx1#
您可以使用通用模板并简化此代码,这将得到优化并更易于阅读。
字符串