C 检查标记是浮点字母数字还是特殊字符。

C 检查标记是浮点字母数字还是特殊字符。,c,C,我使用strtok从stdin获取一行令牌 fgets(line,MAXCOLS,stdin); printf("line:%s\n",line); ch = strtok(line," "); while(ch != NULL) { printf("%s\n",ch); ch = strtok(NULL," "); } 但我如何确定我的ch是浮点、字母数字值还是特殊字符 你的ch从来都不是这些东西。它始终是指向字

我使用strtok从stdin获取一行令牌

    fgets(line,MAXCOLS,stdin);
    printf("line:%s\n",line);
    ch = strtok(line," ");
    while(ch != NULL)
    {
        printf("%s\n",ch);
        ch = strtok(NULL," ");
    }

但我如何确定我的ch是浮点、字母数字值还是特殊字符

你的
ch
从来都不是这些东西。它始终是指向字符数组的指针

您可能想知道这些字符是否是数值的文本表示形式。为此,您可以在令牌上运行
strtol()
strtod()
,看看是否成功。请注意,
12.34
之类的内容将作为整数和浮点数成功读取,因此您应该为这些函数提供第二个参数,并检查是否真正到达令牌的末尾(而不是仅转换令牌的初始部分):


你的
ch
从来都不是这些东西。它始终是指向字符数组的指针

您可能想知道这些字符是否是数值的文本表示形式。为此,您可以在令牌上运行
strtol()
strtod()
,看看是否成功。请注意,
12.34
之类的内容将作为整数和浮点数成功读取,因此您应该为这些函数提供第二个参数,并检查是否真正到达令牌的末尾(而不是仅转换令牌的初始部分):


您可以使用
is*
函数系列,例如


但是请注意,这只告诉您一个字符的值。字符只是一个字符,例如,它不是浮点。

您可以使用
is*
函数系列,例如


但是请注意,这只告诉您一个字符的值。例如,字符只是一个字符,而不是一个浮点。

ch
将始终具有相同的类型,
char*
。根据文件的编码(ASCII、ANSI、UTF8等),您可以检查
ch
作为字符指向的值,查看它们是否为0..9、a..z/a..z等。问题是,如何检查?Isnum检查整数值,而不是浮点数。
ch
将始终具有相同的类型,
char*
。根据文件的编码(ASCII、ANSI、UTF8等),您可以检查
ch
作为字符指向的值,查看它们是否为0..9、a..z/a..z等。问题是,如何检查?Isnum检查整数值,而不是浮点值。
char * e;
long int n = strtol(ch, &e, 0);

if (*e != 0) { /* error? */ }