如何检测控制台输入不是C ++中的数字?

时间:2017-02-03 23:14:30

标签: 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。

1 个答案:

答案 0 :(得分:-3)

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