[英]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
。
返回值
这些函数返回成功匹配和分配的输入项的数量,该数量可能少于所提供的数量,在早期匹配失败的情况下甚至为零 。
如果在第一次成功转换或匹配失败发生之前到达输入结束,则返回
EOF
值。 如果发生读取错误,也会返回EOF
,在这种情况下,将设置流的错误指示符(请参见error(3)
),并errno
表示错误。
嗯,您应该检查handle < 1
。
您也可以尝试strtod(3)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.