2017-09-02 77 views
3

我想創建一個可以正確處理所有輸入的輸入系統。期望的用戶輸入是雙倍的。當用戶輸入字符串時,字符串流將失敗並處理異常。但是,程序無法處理諸如「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; 
} 
相關問題