C ++输入验证以确保输入数字而不是字母

时间:2013-10-08 21:31:00

标签: c++ validation while-loop

所以我试图设置这个程序来计算帐户的余额。我需要确保将起始余额输入为正数。我有正面部分,但我如何确保输入也是数字而不是字母或其他非数字?

#include <iostream>
#include <cmath>
#include <iomanip>
#include <string>
using namespace std;

int main()
{

double  startBal,    // Starting balance of the savings account
        ratePercent, // Annual percentage interest rate on account
        rateAnnual,  // Annual decimal interest rate on account
        rateMonth,   // Monthly decimal interest rate on account
        deposit1,    // First month's deposits
        deposit2,    // Second month's deposits
        deposit3,    // Third month's deposits
        interest1,   // Interest earned after first month
        interest2,   // Interest earned after second month
        interest3,   // Interest earned after third month
        count;       // Count the iterations

// Get the starting balance for the account.
cout << "What is the starting balance of the account?" << endl;
cin >> startBal;
while (startBal < 0 ) {
    cout << "Input must be a positive number. Please enter a valid number." << endl;
    cin >> startBal;
}

// Get the annual percentage rate.
cout << "What is the annual interest rate in percentage form?" << endl;
cin >> ratePercent;

// Calculate the annual decimal rate for the account.
rateAnnual = ratePercent / 100;

// Calculate the monthly decimal rate for the account.
rateMonth = rateAnnual / 12;

while (count = 1; count <= 3; count++)
{

}

return 0;
}

感谢!!!

3 个答案:

答案 0 :(得分:4)

您可以验证cin是否成功:

double startBal;
while (!(std::cin >> startBal)) {
    std::cin.clear();
    std::cin.ignore(std::numeric_limits<streamsize>::max(), '\n');
    std::cout << "Enter a valid number\n";
}

std::cout << startBal << endl;

不要忘记#include <limits>使用std::numeric_limits<streamsize>::max()

答案 1 :(得分:1)

double x;
std::cout << "Enter a number: ";
std::cin >> x;
while(std::cin.fail())
{
    std::cin.clear();
    std::cin.ignore(numeric_limits<streamsize>::max(),'\n');
    std::cout << "Bad entry.  Enter a NUMBER: ";
    std::cin >> x;
}

xdouble替换为您需要的任何变量名称和类型。显然,将提示修改为必要的内容。

答案 2 :(得分:0)

你所要求的实际上非常困难。唯一完全正确的方法是将输入作为字符串读取,然后查看字符串是否采用正确的数字格式,然后将字符串转换为数字。我认为当你只是一个初学者时,这很困难。