cin.peek用于输入验证 [英] cin.peek for input validation

查看:136
本文介绍了cin.peek用于输入验证的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在使用 cin.peek 进行验证时遇到问题。
我想要做的是从用户那里只得到一个正 int 。我尝试使用以下代码
(我必须使用函数)
getwholenum getposnum 没有 getnum 函数正常工作):

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


推荐答案

试试这个...

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

这篇关于cin.peek用于输入验证的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆