2017-09-23 64 views
0

我需要的是絕對的方法可以不接受小數或有是不會接受這兩個小數和字母如何不接受小數和字母輸入

#include <iostream> 
#include <limits> 
#include <cmath> 


using namespace std; 

double checkInput(double pagkain) 
{ 
    do 
    { 
     cin.clear(); 
     cin.ignore(numeric_limits<streamsize>::max(), '\n'); 
     if (floor(pagkain) != pagkain || pagkain >= 51) 
     { 
      cout << "Invalid Input, We do not aceept letters or decimals. \nPlease try again: "; 
     } 

    }while (floor(pagkain) != pagkain || (pagkain >50)); 

    return pagkain; 
} 
+0

請不要粘貼你的整個程序,特別是當它確實與你的核心問題無關時。此外,這不是代碼評論網站。這是爲了提出非常具體的編程問題。 –

+0

@ PaulJ.Lucas謝謝你提醒我,感謝你! –

回答

0

既然你只希望整數功能,將數據類型更改爲int而不是double是安全的。

接下來,您可以將它作爲字符串讀取並驗證其正確性。

你可以做這樣的事情:

int GetValidInteger(int lowerBound, int upperBound){ 
    string result; 
    while(true){ 
    getline(cin, result); 
    bool valid = true; 
    for(int i = 0; i < result.size(); i++){ 
     if(!isdigit(result[i])){ 
     valid = false; 
     break; 
     } 
    } 
    if(!valid){ 
     cout << "Only integers are accepted. Try again...\n"; 
     continue; 
    } 
    int intResult = stoi(result); 
    // Outside this loop, you know that you have a valid integer. 
    // You can check now for your other constraints. 
    if(intResult < lowerBound || intResult > upperBound) 
     cout << "Input should be between " << lowerBound << " and " << upperBound << ". Try again...\n"; 
    else 
     return intResult; 
    } 
} 

您可以使用該功能在所需範圍內得到有效的投入。爲了獲得在1-5範圍內的順序,你這樣做:

int order = GetValidInteger(1,5);

同樣,當你想在1-50範圍內的輸入。

+0

哇!太棒了!這是我一直在尋找的東西:o謝謝你!順便說一句,我怎麼知道stoi? –

+0

不客氣!這裏有一個參考http://en.cppreference.com/w/cpp/string/basic_string/stol –

相關問題