C ++中的整数验证

时间:2015-01-15 12:31:53

标签: c++

您好亲爱的程序员, 我正在使用c ++对系统进行编码,并且我已经远离这种语言一段时间了,我已经定义了一个函数,其中将询问一组问题以获取特定数据,因此输入将进行验证,当我想验证一个整数来检查输入的值是否只是数字,不知何故它不起作用,我写了一个函数“isnumber”来检查值是否为数字,但不知何故,即使我输入数字它转到我的if条件并找到没有数字。我希望我不会犯一个非常愚蠢的错误,但任何考虑都值得赞赏。这是代码;

// validation Against Numbers 

bool isNumber(int a)
{
    if (isdigit(a)){

        return true;

    }

    else {

        return false;

    }
}

//收集公寓详情

 cout << "Number Of Bedrooms:" << endl;

    cin >> number_of_bedrooms;

    if (isNumber(number_of_bedrooms) == false ) {

        cout << "Please Do Enter Numbers Only" << endl;
        cin.clear();

    }

    else if (number_of_bedrooms != '2' || number_of_bedrooms != '3' || number_of_bedrooms != '4') {

        cout << "The Number of Bedrooms Is Limited To 2, 3 or 4 !" << endl;
        cin.clear();

    }

1 个答案:

答案 0 :(得分:1)

在C ++中,您可以取消isdigit调用,而是执行类似(未经测试)的操作:

int num;
if (std::cin >> num)
{
    // Read a number from cin
    std::cout << "Yay" << std::endl;
}
else
{
    // Grr
    std::cout << "failed to read number" << std::endl;
    std::cin.clear();  // Clears error state flags
}

流中的C ++运算符<<读取格式化输入,因此它将您输入的数字转换为整数,如果失败则设置内部错误状态标记。

如果你不想使用isdigit,你需要读入一个字符(因为isdigit需要一个字符/ int作为其参数):

char ch;
std::cin >> ch;
if (std::cin.good() && isdigit(ch))
{
    // Yay
}

即使在读取单个字符时仍然检查std::cin仍然是好的也是一个好主意,因为呼叫仍然可能失败(可能是用户发送了EOF信号)。