繁体   English   中英

Sscanf和检测输入转换错误[C]

[英]Sscanf and detect input conversion errors [C]

我想将程序参数转换为double。 简单:我想将一个双精度值作为参数传递给我的程序。 但是要正确,我想检测转换错误。 我发现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怎么了?

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

关于scanf(3)Linux程序员手册中

返回值

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

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

嗯,您应该检查handle < 1

您也可以尝试strtod(3)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM