2017-02-27 42 views
0

我不會來檢查年齡是否是數字或沒有在這個例子中,將接受1E的數量,同時也不會接受E1,我不會只接受數字
沒有任何符號或字母我如何驗證輸入只是數字?

int main() 
    { 
     int age= 0; 
     std::cin >> age; 
     if (std::cin.fail()) 
     { 
     std::cout << "I failed, try again ..." << std::endl; 
     std::cin.clear(); // reset the failed state 
    } 
+0

'getline' +'regex' – knivil

+0

@knivil,如果試圖存儲整數結果,正則表達式有點矯枉過正。通過適當的錯誤檢查,調用'std :: stoi'就足夠了。 – chris

+0

@knivil使用'regex'可能是矯枉過正。 –

回答

0

真的cin和提取操作符不適合解析用戶輸入。他們可以輸入自動格式化的記錄,但不能輸入可能有自由格式錯誤的輸入。

如果您使用基於行的輸入,然後調用函數strtol(),您可以找到數字。 strtol()也處理減號和數字,這些數字太大而不適合整數。它本質上是安全的整數解析器。另外,出錯時,您可以輕鬆丟棄整條線路並要求用戶重新輸入,這通常是所需的行爲。