cin.peek用于输入验证

时间:2016-12-07 14:45:47

标签: c++ validation input int

我在使用cin.peek进行验证时遇到问题。 我试图做的只是从用户那里得到一个肯定的int。我尝试过使用以下代码 (我必须使用功能) (getwholenumgetposnum在没有getnum函数的情况下正常工作):

#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 个答案:

答案 0 :(得分:0)

试试这个......

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;
}