我正在尝试读取浮点数(命令行输入)。这是正确的方法吗?
sscanf(argv[i], "%f", &float)
答案 0 :(得分:2)
使用sscanf()
元素argv
是从命令行参数中提取float
的一种方法。您还应检查返回值,以查看是否实际从字符串中提取float
并将其存储到变量中。
或许更好的方法是使用strtod()
,因为您可以使用它的第二个参数执行更好的验证。您可以使用该指针检查转换中使用的最后一个字符是字符串中的最后一个字符。即。您可以检查"3.5abc"
是否包含有效的浮点数,但整个字符串不是一个有效的浮点数。
如果命令行输入的含义是从stdin
读取输入,那么这与argv
无关,而应该使用scanf()
}或fgets()
+ strtod()
。
请注意,还有函数atof
,它本质上是strtod
的一个版本,它不会为您提供额外的错误检查功能。仅从手册页开始:strtod(nptr, (char **) NULL);
。 C99还提供函数strtof()
,它返回float
而不是double
。您可以将double
分配给float
并隐式转换,因此不要认为使用strtod()
会导致问题。