2017-02-17 4 views
0

以下のコードを改善したいと思います。 try-catch文を使って入力文字を検証したいと思います。ユーザーが無効な文字を入力すると、エラーメッセージが出力されます。Try-catchでC++の文字を検証する方法は?

私には2つの方法があります:showMenuとselectOperationです。

方法:

//Show Operations in menu 
void showMenu() 
{ 
cout << " Select an option: \n\n" 
    << "1 = Register new customers \n" 
    << "2 = Register new products \n" 
    << "3 = Add Product Existence \n" 
    << "4 = Register a new purchase \n" 
    << "0 = Exit \n\n"; 
} 


//Select an Operation from menu 
int selectOperation() 
{ 
    int selectedOperation = 0; 
    do 
    { 
     showMenu(); 
     cin >> selectedOperation; 
     if ((selectedOperation < 0) || (selectedOperation > 4)) 
     { 
      cout << "\n You have selected an invalid option" 
      << "...Try again \n"; 
      system("pause"); 
      system("cls"); 
     } 
    } while ((selectedOperation < 0) || (selectedOperation > 4)); 
    return selectedOperation; 
} 

私はこれをどのようにしたらよいでしょうか?

+8

例外を使用してプログラムの通常のフローを制御しないでください。 –

+5

try/catchは実際にそのようなことを意図していません。有効な文字を返すか、ユーザーに入力を促す関数を記述する必要があります。 –

+1

あなたの質問は、車の運転方法を尋ねるようなものです。あなたはそれをすることができましたが、それは賢明ではなく、物事を不必要に困難にするでしょう。 –

答えて

-1

また、あなたは通常exceptions for invalid inputを取得し、処理するためにしたくない... if文ifとelseの対応

+0

'cin'ストリームは、数値以外のものが読み込まれた場合に' fail() '状態になりますので、' if else if'文で何をチェックするつもりですか? –

+0

良い点、私はそれを実現しませんでした – dereklenz14

+1

この回答はコメントでなければなりません。あなたが質問に答えるには、提案ではなく完全な答えを与えるべきです。 – xinaiz

1

これを行うことができます。
例外を使用してプログラムの通常のフローを制御することは、よく知られています。design flaw/anti patternです。あなたはクリアする必要があり

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); 

// 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)のようになります。 慣用的な方法は、入力をチェックすることです状態はストリーム入力ストリームはfail()状態から何らかの方法で入力します。

+0

私はC++の基本的な初心者です。ありがとう、私はsuposse。 –

関連する問題