Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 有没有办法使用atof并确定更改的值是实际的0还是有错误的值?_C - Fatal编程技术网

C 有没有办法使用atof并确定更改的值是实际的0还是有错误的值?

C 有没有办法使用atof并确定更改的值是实际的0还是有错误的值?,c,C,为了创建一个简单的向量计算器,我试图找到一种使用atof()的方法,但我唯一的问题是输入向量的元素。使用atof,因为如果字符未转换,则返回值为0。在传递给atof之前,是否需要检查用户从fgets输入到字符数组中的值是否为0 以下是我到目前为止检查字符的代码: do { printf("%s", promptMessage); fgets(size, 256, stdin); /*if(size == 0) { myInput = atof(si

为了创建一个简单的向量计算器,我试图找到一种使用atof()的方法,但我唯一的问题是输入向量的元素。使用atof,因为如果字符未转换,则返回值为0。在传递给atof之前,是否需要检查用户从fgets输入到字符数组中的值是否为0

以下是我到目前为止检查字符的代码:

do
{
    printf("%s", promptMessage);
    fgets(size, 256, stdin);
    /*if(size == 0)
    {
        myInput = atof(size);
        sucessful = true;
    }*/
    if(atof(size) != 0)
    {

        myInput = atof(size);
        sucessful = true;
    }
    else
    {
        printf("Please enter a correct number: ");
    }
}while(!sucessful);

对不起,如果我说的不太有意义,但我想问的是,在将字符数组中的值发送到atof之前,我是否可以检查它是否为0,或者进行某种检查,以便为向量元素的条目实际设置0值?

不要使用
atof()
atof()
没有有用的错误指示。请改用strod()。

通常最简单的解决方案很难找到:

if ( memcmp(buffer,"0.0\n",4) == 0 )
{
    // zero - can call atof
}
else
{
    // whatever
}

当然,您可能要求以这种方式表示零,而不是使用任何其他模式。毕竟理智的人写0.0而不是-0.000等等;-)printf
fgets
atof
?检查字符串中的字符,看看它们是否只包含数字,最多包含一个句点。为什么不直接使用
scanf
?标准没有定义0.0以外的任何错误报告(这也是一个有效值)。但是,如果你使用MSVCRT而不关心可移植性,那你就很幸运了——它会将errno设置为EINVAL。老实说,我不确定我们是否可以使用strtod(),但是可以用sscanf()实现这一点吗?
strtod()
是一个比
atof()
更低级别的函数,因为
atof()
只调用
strtod()
(好吧,至少它可以)。是的,你也可以使用
sscanf()
如果(sscanf(“%lf”)和&value)==1
,如果
value
double
类型,或者
如果
value
float
类型,我想(我对代码< >代码>函数的格式说明符也不确定;我对C++ iNoSoFipe有更多的了解。SsAcf值帮助了很多!我想看看是否……==0但它不起作用,但现在一切似乎都很好!非常感谢。
sscanf
的一个问题是,如果输入字符串在语法上是一个数字,但超出了目标类型的范围,则它有未定义的行为。
strtod
是避免该问题的唯一方法(除非您自己从头开始实现)@ dieMeple UHL:C和C++都不需要IEEE 754。C标准中的措辞是:“如果这个对象没有合适的类型,或者如果转换结果不能在对象中表示,则行为是未定义的”;我认为IEEE无穷大必然避免像“代码> sSCANF之类的东西损坏未定义的行为。“1.0E9999”、“%lf”、&x)