如何检测控制台输入不是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; 
} 
+1

这是一个无限循环,如果它被输入的话。 –

+0

@BaummitAugen哎呀...忘了重置...更好? –

+0

仍无限循环,坏的输入仍在流中。 –