c - 检查输入字符串是整数还是 float 的函数?

标签 c

C 中是否有一个函数可以检查输入是 intlong int 还是 float?我知道 C 有一个 isdigit() 函数,我可以创建一个 isnumeric 函数,如下所示:

int isnumeric( char *str )
{
    while(*str){
        if(!isdigit(*str))
            return 0;   
        str++;
    }
    return 1;
}

但我想知道如何创建一个接受 float (作为字符串)并输出 TRUE/FALSE 值的函数。

最佳答案

这应该可以做到。它使用 strtod 将字符串转换为 float 并检查它之后是否还有更多输入。

int isfloat (const char *s)
{
     char *ep = NULL;
     double f = strtod (s, &ep);

     if (!ep  ||  *ep)
         return false;  // has non-floating digits after number, if any

     return true;
}

区分 floatint 比较棘手。正则表达式是一种方法,但我们可以只检查 float 字符:

int isfloat (const char *s)
{
     char *ep = NULL;
     long i = strtol (s, &ep);

     if (!*ep)
         return false;  // it's an int

     if (*ep == 'e'  ||
         *ep == 'E'  ||
         *ep == '.')
         return true;

     return false;  // it not a float, but there's more stuff after it
}

当然,更精简的方法是将值的类型和值一起返回。

关于c - 检查输入字符串是整数还是 float 的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1997587/

相关文章:

c - 如何在 Linux 上使用 Intel Westmere 1GB 页面?

c - 打印字母组合时出现 NULL '\0' 的不稳定行为

c - snprintf,用于 C 中整数到字符串的转换

c - 如何摆脱不需要的汉字?

c - 返回指向静态定义的结构数组的指针

c - 如何将指针传递给C中的函数

c - 如何在函数指针中创建唯一的静态变量?

c - 在 C 中读取固定数量的字节?

c - 嵌入式 C 时序问题

c - 从Linux IPC消息队列中读取两次消息的方法