isalpha()为float / integer输入返回非零值

时间:2014-03-07 00:36:01

标签: c validation error-checking

我正在使用C对我的程序进行一些错误检查,目前正在测试以确保输入数据点为float / int(基本上不是字符)

为此我使用isalpha函数。它适用于100以下的所有数字,但如果我输入值100,它将返回1024而不是0.任何特殊原因会发生这种情况,或者您是否知道更好的错误检查方法?

if ((isalpha(T1) != 0) || (isalpha(T2) != 0) || (isalpha(T3) != 0)
|| (isalpha(X1) != 0) || (isalpha(X2) != 0) || (isalpha(X3) != 0))
{
    error checking statements
}
else
{
    Calculations
}

1 个答案:

答案 0 :(得分:1)

为什么要将浮动传递给isalpha?将字符存储在浮点数并检查它的重点是什么?

isalpha的声明为int isalpha ( int c );,因此如果您将浮点数传递给它,浮动将截断为int ,使其生成错误的结果。尝试输入99.5或类似的东西,然后看

更重要的是,isalpha仅适用于char值或EOF,其他值将调用未定义的行为

  

如果ch的值不能表示为unsigned char且不等于EOF,则行为未定义。

     

http://en.cppreference.com/w/cpp/string/byte/isalpha

这基本上是一个XY问题。 isalpha不是验证输入值的方法。您需要将输入作为字符串并检查它是否符合您的条件