我想改进下面的代码。我想使用try-catch语句来验证输入字母。如果用户输入无效字母,则应打印错误消息。
我有两种方法:showMenu和selectOperation。
方法:
/apps/guid/details
我该怎么做?
答案 0 :(得分:1)
您通常不希望得到并处理exceptions for invalid input 使用异常来控制程序的常规流程是众所周知的design flaw/anti pattern。 惯用的方法是检查输入流状态:
// is true for non integer input and numbers outside the valid range
while(!(cin>>selectedOperation)) {
// Cleanup the stream state
cin.clear();
std::string dummy;
cin >> dummy; // Consume the invalid input
cout << "Please input a number." << std::endl;
}
异常变体看起来像这样(更复杂,更简洁的IMO):
cin.exceptions(std::ifstream::failbit);
bool validInput;
do {
try {
validInput = true;
cin>>selectedOperation)
}
catch (std::ios_base::failure &fail) {
validInput = false;
// Cleanup the stream state
cin.clear();
std::string dummy;
cin >> dummy; // Consume the invalid input
cout << "Please input a number." << std::endl;
}
} while (!validInput);
您必须以fail()
州的任何方式清除输入流。
答案 1 :(得分:-1)
您也可以使用if else if语句执行此操作...