2010-05-11 150 views
2

我需要两个命令isdigit()isalpha()如何工作的简要说明。当然,我在提问之前先阅读了在线资源,但我尝试了这些资源,无法让它们工作。使用它们的最简单方法是什么?使用isdigit()和isalpha()命令最简单的方法是什么?

我知道这还给一个值,所以我假设我可以这样使用它:

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

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

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

回答

1

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

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

这是isdigit函数签名:它表示它将接受int值(或东西,可以转换为int,像char),它会返回一个int。因此,您不能将它传递给一个数组(尽管您可以在int[]的每个成员上调用它)。

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

文档说以下内容:

描述:该函数因而isalpha() 返回非零值,如果它的参数是字母表中的 信。否则, 返回零。

这意味着您的比较对于所有实现都是不正确的。更好的做这样的事情:

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

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

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

+0

谢谢!所以我只能用它来比较一个字符? – NLed 2010-05-11 20:47:53

+0

这个函数的一个调用将需要一个字符,但是当然你可以根据需要重复。 – danben 2010-05-11 21:25:04

+0

感谢您的回复,最后的一个offtopic问题...什么是将角色转换为数字的方法? – NLed 2010-05-11 21:54:04

0

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

它将确定例如'5'是数字还是字母数字(部分字母表)。是的,你的用法是正确的,如果someInput的类型是“字符”

+0

感谢您的回覆:) – NLed 2010-05-11 21:01:36

+0

嘿,没问题!这就是我在这里! – LukeN 2010-05-11 21:20:18

+1

'isxxx()'函数被定义为接受一个'int',并且可以传递'getchar()','getc()'和'fgetc()'返回的所有值,即所有类型为'unsigned char'加上特殊值'EOF',而没有其他。 – chqrlie 2017-01-12 12:32:44

2

你做通常要比较的返回值,只把它当作一个布尔值:

if (isalpha(someinput)) 
    do_whatever(); 

如果硬要做一个比较,它需要是!=0,但它是完全多余和毫无意义的。

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

另请注意,在调用任何is*函数之前,通常需要将输入投射到unsigned char。当许多字符集被视为signed char时,会将某些字符视为负数,并将负值传递给其中的任何字符会导致未定义的行为。

+0

如果扫描的输入是稍后将用于计算的数字,该怎么办? – NLed 2010-05-11 20:54:10

+0

@ZaZu:如果你已经将某些东西转换为数字,那么'isdigit'或'isalpha'就不再有任何实际用途 - 它现在是一个数字,而不是数字或字母字符。 – 2010-05-11 21:10:14

+0

如何将char转换为数字? – NLed 2010-05-11 21:13:15

相关问题