-2

我的程序运行良好,除非我为其中一个数字输入一个数字,然后它只是终止而不是声明无效的卡号。如何使用 isdigit 来处理问题?

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

int main()
{




 //Input Variables

double cardnumber;
string name;
string address;
double TypeofBook;
string Title;
float RegularFine;
float BestSellersFine;
float MagazinesFine;
float HardcoverBooksFine;
double DaysLate;
char Choice;
char Y;
char N;
char y;
char n;


 do

{ //Get Patron's info

cout << "Please Enter Patron's Library Card Number: \n";
cin >> cardnumber;
//Validate card number
while ((cardnumber <= 0) ||(cardnumber > 9999))
{
cout << "You have entered an invalid card number \n";
cout << "Enter a valid card number \n";
cin >> cardnumber;
}
4

5 回答 5

1
bool isnum(const std::string& arg){
  for(std::string::iterator it=arg.begin();it!=arg.end();it++)
     if(!isdigit(*it))
         return false;
  return true;
}
于 2013-09-22T10:28:44.460 回答
0

isdigit 用于字符。如果您期望非数字字符作为输入。您必须使用字符串来获取这些然后进行验证。如下:

string cardnumber;
cout << "Please Enter Patron's Library Card Number: \n";
cin >> cardnumber;
//Validate card number
while (cardnumber.find_first_not_of("0123456789") != -1)
{
    cout << "You have entered an invalid card number \n";
    cout << "Enter a valid card number \n";
    cin >> cardnumber;
}

祝你好运,

于 2013-09-22T08:27:24.783 回答
0

使用std::cin >> cardnumber表达式的返回值:

int cardnumber;
if (std::cin >> cardnumber && (cardnumber > 0 && cardnumber  < 9999)) {
    // success
}

其中“成功”表示int已成功检索,std::cin并且在区间 <0 内;9999)

于 2013-09-22T08:32:32.063 回答
0
#include <iostream>
#include<string>
using namespace std;

int toNumber(string s)
{
    int num=0;
    for (int i=0;i<s.size();i++)
        if (s[i]>='0'&&s[i]<='9')
            num = num*10 + s[i]-'0';
        else
            return -1;
    return num;
}

int main(int argc, const char * argv[])
{
    int number;
    string cardnumber;
    cout << "Please Enter Patron's Library Card Number: \n";
    cin >> cardnumber;

    while ( (number = toNumber(cardnumber)) == -1 || number > 9999) // no need to check if less than zero. cause it will return -1.
    {

        cout << "You have entered an invalid card number \n";
        cout << "Enter a valid card number \n";
        cin >> cardnumber;
    }

    // use card number here as string (cardnumber) and int (number).
    cout << cardnumber << " " << number << endl;
    return 0;
}
于 2013-09-22T08:39:16.743 回答
0

我猜你正在寻找一个不char应该输入的验证,如果我是正确的,那么有一个函数is_int 读取这个

于 2013-09-22T08:41:26.447 回答