如何使用Try-catch验证c ++中的字母?

时间:2017-02-17 17:19:26

标签: c++ validation oop try-catch

我想改进下面的代码。我想使用try-catch语句来验证输入字母。如果用户输入无效字母,则应打印错误消息。

我有两种方法:showMenu和selectOperation。

方法:

/apps/guid/details

我该怎么做?

2 个答案:

答案 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语句执行此操作...