cin.peek用于输入验证 [英] cin.peek for input validation
本文介绍了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屋!
查看全文