-1

我想将程序参数转换为双精度。很简单:我想将一个双精度值作为参数传递给我的程序。但为了使它正确,我想检测转换错误。我发现这atof不是一个好的选择,所以我切换到sscanf. 这是我的代码:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
    argc --;
    argv++;

    double s;
    int handle =-1;

    handle = sscanf(*argv, "%lf", &s);
            if(handle == -1)
            {
                fprintf(stderr, "Invalid input double!\n");

            }else{ printf("%f\n", s);}

    return 0;
}

但是输入错误,即:./code blabla它打印出 0.0000000000 怎么了?

4

2 回答 2

2

使用strtod代替scanf家庭。0.0如果无法解析任何数字,则返回(不幸的是,当数字实际为 时0.0)。您可以使用该endptr参数来检查函数停止解析数字的位置,以便检查字符串是否包含有效数字。它设置errno无法表示值的时间。

于 2013-07-17T13:14:10.613 回答
2

Linux程序员手册scanf(3)

返回值

这些函数返回成功匹配和分配的输入项的数量,该数量可能少于提供的数量,或者在早期匹配失败的情况下甚至为零。

EOF如果在第一次成功转换或匹配失败发生之前到达输入结尾,则返回该值。EOF如果发生读取错误,也会返回,在这种情况下,流的错误指示符(请参阅error(3))已设置,并且errno设置指示错误。

因此,您应该检查handle < 1.

你也可以试试strtod(3)

于 2013-07-17T13:14:31.093 回答