替代 atof() 函数以区分输入 0 失败

nos*_*rov 2 c floating-point atof

我创建了一个函数来验证实数的输入。它运行良好,但由于atof()函数0在失败时返回,因此无法0作为输入值输入。任何人都可以帮助解决这个问题?

float validate_float()
{
    float num;
    char str[8];
    do
    {
        printf("enter a float number:");
        fflush(stdin);
        gets(str);
        num=atof(str);
    }
    while(num==0);
    return num;
}
Run Code Online (Sandbox Code Playgroud)

Sou*_*osh 5

是的,这是atof().

您可以使用strtof()/strtod()代替。

语法:

double strtod(const char *nptr, char **endptr);
float strtof(const char *nptr, char **endptr);
Run Code Online (Sandbox Code Playgroud)

注意:要区分实际输入 0无转换 0,您需要检查endptr.


话虽如此,正如其他人所提到的,

  • 不要使用fflush(stdin). 它调用未定义的行为
  • 永远不要使用gets(),它会遭受可能的缓冲区溢出。使用fgets()来代替。