检查 main 中的字符串是否是有效的 float

标签 c

我目前有以下代码。但是,如果输入类似 3.1?43 的内容,它仍然被标记为 float 。我知道我在之后没有正确检查。但我不确定如何检查。

int floatNum(char *s) {
    char *ptr = s;
    char *ep = NULL;
    long i = strtol(s, &ep, 0);

    //check if converted to long int
    if (!*ep) {
        return false;
    }

    //Check if char 
    if (*ep == 'e' || *ep == 'E' || *ep == '.') {
        return true;
    }

    return false;
}

谢谢你,这是我的解决方案。由于我的项目的设置方式,我只希望它在有效 float 时返回 true,否则返回 false。

int floatNum(char *s) {
    const char *ptr = s;
    double x = strtod(ptr, &s);

    //check if converted to long int
    if (*s == 0) {
        return true;
    }
    else {
        return false;
    }
    return false;
}

最佳答案

要测试字符串是否为有效的浮点值,请使用 strtod 。此函数解析带有可选小数点和可选指数说明符(“e”或“E”)的数字字符串:

char *p;

errno = 0;
double f = strtod(str,&p);
if (errno) {
    printf("conversion failed");
}
if (strlen(str)==0) {
    printf("empty string\n");
} else {
    printf("f=%f\n", f);
    if (*p == 0) {
        printf("entire string valid\n");
    } else {
        printf("extra characters: %s\n", p);
    }
}

关于检查 main 中的字符串是否是有效的 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39667690/

相关文章:

c - C 标准是否要求编译时常量表达式求值?

C- Linux- 创建线程并传入缓冲区

c++ - 您将如何对内存分配器进行单元测试?

c - 如何计算文件中每个数字的出现频率?

c - 将字符串作为十六进制放入 Uint32_t

c - 在这种情况下如何制作循环?

c - 在 C 中生成/创建六边形网格

C 程序跳过 printf 和 scanf 语句

c++ - 由于早期版本的先前安装,Makefile无法安装代码

c - Makefile:管理多个包含路径