如何检测控制台输入不是C++中的数字?
问题描述:
这是代码...如何检测控制台输入不是C++中的数字?
#include <iostream>
#include <iomanip>
#include <cmath>
#include <math.h>
using namespace std;
void CorrectPercent(double Percent) {
unsigned short int Error = 0;
while (Error==0){
cout << "\nEnter the annual interest rate (%):\t\t";
cin >> Percent;
do {
if (Percent <= 0) {
cout << endl << "Please enter a valid annual interest rate (%): ";
cin >> Percent;
} else if (isnan(Percent) == true) {
cout << endl << "Please enter a valid annual interest rate (%): ";
cin >> Percent;
}
else {
Error=1;
}
} while (Error == 0);
//Error++;
}//while (Error == 0);
}
int main()
{
double Percent;
char Retry = 'Y';
do
{
cout << setprecision(2) << fixed;
system("cls");
CorrectPercent(Percent);
} while (Retry == 'Y' || Retry == 'y');
return 0;
}
的CorrectPercent功能应该直到输入一个有效的数值是保持运行。所以,问题是,我怎样才能检测到输入是数字?只是为了获得更多信息,我正在使用Visual Studio 2015.
答
由于Percent
被声明为double
,cin >> Percent
会在用户输入非数字数据时失败。你可以用cin.fail()
来检测:
std::cin >> Percent;
while (std::cin.fail()) {
std::cin.clear();
std::cin.ignore(std::max<std::streamsize>());
std::cout << "Please enter a valid number." << std::endl;
std::cin >> Percent;
}
这是一个无限循环,如果它被输入的话。 –
@BaummitAugen哎呀...忘了重置...更好? –
仍无限循环,坏的输入仍在流中。 –