cin.peek for input validation

2019-06-09 05:47发布

I'm having trouble with using cin.peek for validation. what I'm trying to do is to get only a positive int from the user. I've tried using the following code (I have to use functions) (getwholenum and getposnum work fine without getnum function):

#include <iostream>
#include <string>

using namespace std;


double getposnum(double &);    //function protoype for getting positive number
double getwholenum(double &);  //function protoype for getting a whole number
double getnum(double &);       //function protoype for getting an int

int main()
{




static double x;
cout << "please give me a number" << endl;
cin >> x;
cin.ignore();
x = getnum(x);
cout << x;
cin.get();

}

double getnum(static double & x)    //validation for int only (no char)
{
// cin checks if the stream has failed
// cin = true, cin = false !cin


while (!(cin >> x))
{
    cout << "Input was not a number" << endl << "Enter a VALID number! ";
    cin >> x;
    cin.clear();
    cin.ignore();

} 
cout << "it's not a letter";
getposnum(x);

return x;
}  // if i dont put in a letter nothing would happen


double getposnum(static double & x) // another function to get a positive number
{
while (x < 0)
{
    cout << "negative" << endl;
    cin >> x;
    cin.ignore();

}
cout << "positive" << endl;

getwholenum(x);

return x;
}

double getwholenum(static double & x)
{
while (x != static_cast<int>(x))   // forcing a double into an int if it's equal then the number was an in
{
    cout << "not a whole number" << endl;
    cin >> x;
    cin.ignore();
}
cout << "whole number";
return x;
}    

1条回答
在下西门庆
2楼-- · 2019-06-09 06:28

Try this...

include <iostream>
using namespace std;

int main()
{
    int num;
    cout << "Enter a positive integer: ";
    cin >> num;

    while (num <= 0 || cin.peek() != '\n')
    {
        cout << "Invalid Input!\n";
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
        cout << "Please re-enter [positive integer only]: ";
        cin >> num;
    }

    return 0;
}
查看更多
登录 后发表回答