2017-09-02 14 views
3

私は正確にすべての入力を処理できる入力システムを作成したいです。所望のユーザ入力は2倍である。ユーザーが文字列を入力すると、にstringstreamは失敗し、例外が処理されます。しかし、プログラムは、文字列の先頭に番号を登録し、例外を発生させず、二重番号にすることを渡す代わりに、不適切な入力としてそれらを標識するのは、そのような「3245 2345 5」と「21523i4jf」などの入力を処理することはできません。どのように私は私のプログラムが正しく、すべてのユーザー入力を処理するべき?

while (true) 
{ 
    string user_input; 
    cout << "Your Choice: "; 
    getline (cin, user_input); 
    cout << endl; 

    if (user_input == "quit") 
    { 
     break; 
    } 

    try 
    { 
     double number; 
     stringstream stringstream_input; 

     stringstream_input << user_input; 
     stringstream_input >> number; 

     if (stringstream_input.fail()) 
     { 
      throw 90; 
     } 

     cout << number << endl << endl; 
    } 

    catch (int x) 
    { 
     cout << "Please enter a valid input!" << endl << endl; 
    } 
} 
+1

これは、あなたが何をしたいことがありますhttps://stackoverflow.com/questions/24504582/how-to-test-whether-stringstream-operator-has-parsed-a-bad-type-and-skip -it/27004240#27004240 – Galik

答えて

1

正しく処理するにはstd::stod()を使用できます。

try { 
    number = std::stod(user_input); 
} 
catch(const std::invalid_argument& e) { 
    std::cerr << "Invalid input '" << user_input << "'" << std::endl; 
} 
関連する問題