我目前有以下代码。但是,如果输入类似 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/