使用isdigit()和isalpha()命令最简单的方法是什么?

时间:2010-05-11 20:29:03

标签: c arrays scanf stdio

我需要简要说明两个命令isdigit()isalpha()的工作原理。当然,我在提出问题之前阅读了在线资料,但是我尝试过这些资源并且无法让他们工作。使用它们最简单的方法是什么?

我知道它会返回一个值,所以我假设我可以像这样使用它:

if(isdigit(someinput)==1)
 return -1;

这是对的吗?我可以将它用于任何类型的角色吗?我可以将它与浮点数或数组进行比较吗?

假设,我想扫描一个包含数字和字母的文本文件,并确定我正在扫描的内容。这两个命令可以在这种情况下使用吗?

3 个答案:

答案 0 :(得分:2)

通常想要比较返回值,只需将其视为布尔值:

if (isalpha(someinput))
    do_whatever();

如果您坚持进行比较,则需要!=0,但这完全是多余的,毫无意义。

您在已从输入中读取的字符上使用它,这些字符不是(此时)浮动或任何东西,只是字符组。在浮点数的情况下,其中一些将是数字,但许多也将包括小数点(不是数字),偶尔可能包括e+-好。

另请注意,在调用任何unsigned char函数之前,通常需要将输入强制转换为is*。许多字符集在将某些字符视为signed char时将其视为负数,并将负值传递给其中任何字符都会产生未定义的行为。

答案 1 :(得分:1)

它们不是“命令”,它们是功能。函数接受参数并返回值。

#include <ctype.h>
int isdigit( int ch );

这是isdigit函数的签名:它表示它会接受int值(或可以投放到int的内容,例如char ),并将返回int。因此,您不能将它传递给数组(尽管您可以在int[]的每个成员上调用它。)

isalpha的签名是相同的(显然名称除外)。

文档说明如下:

  

描述:函数isalpha()   如果参数为a,则返回非零值   字母表。除此以外,   返回零。

这意味着您的比较对于所有实现都不正确。最好做一些像:

if (isdigit(someinput)) {
 return -1;
}

在C中,0将在布尔表达式中计算为false,并且所有非零值都将计算为true。因此,此检查将涵盖返回-1,5,无论如何的isdigit的实现。

如果要将这些应用于文本文件中的值,则必须一次读取一个字符的文本,并将收到的字符传递给这些方法。

答案 2 :(得分:0)

您可以将它用于任何 char 类型! (实际上它是int,我不知道这是出于兼容性原因还是其他原因,但最常见的用法是字符)

它将确定例如'5'是数字还是字母数字(字母表的一部分)。是的,如果someInput的类型为“char”

,则您的用法是正确的