将字符串转换为double
我正在寻找一种从用户那里获得浮点输入的方法。
我的方法是使用自制的getstrn函数并将其插入到另一个将字符串转换为double的函数中。
我的安全获取字符串:
void safeGetString(char arr[], int limit){ int c, i; i = 0; c = getchar(); while (c != '\n'){ if (i < limit -1){ arr[i] = c; i++; } c = getchar(); } arr[i] = '\0'; }
编写这个get_double函数的最佳方法是什么?
尝试strtodfunction:
char *end; double num = strtod(arr, &end);
结束将指向处理的最后一个char。 如果您不关心,可以将秒设置为NULL
。 或者你可以使用atof
: atof(str)
相当于strtod(str, (char **)NULL)
。
但你应该关心,因为你可以检查输入是否格式错误:
if (*end != '\0') // Handle malformed input
使用strtod
,这就是它的用途。 而且fgets
可以替换你的safeGetString
函数。
任何:
- 关于strtod()
- ATOF()
- 的sscanf()
其中sscanf提供了最强的validation,因为如果输入不能作为double进行解释,则其他两个返回0.0的有效double值,而sscanf()返回与输入成功匹配的格式说明符的数量。 所以:
input_valid = (sscanf( arr, "%lf", value ) != 0 ) ;
- 你为什么不使用
fgets()
? - 你正在寻找
atof()
。
(感谢R.在第1部分修复我的愚蠢建议)