我正在寻找一种从用户那里获得浮点输入的方法。
我的方法是使用自制的gettrn函数并将其插入到另一个将字符串转换为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函数的最佳方法是什么?
答案 0 :(得分:12)
尝试使用strtod函数:
char *end;
double num = strtod(arr, &end);
结束将指向最后处理的char。如果您不关心,可以将秒设置为NULL
。或者您可以使用atof
:atof(str)
相当于strtod(str, (char **)NULL)
。
但您应该关心,因为您可以检查输入是否格式错误:
if (*end != '\0')
// Handle malformed input
答案 1 :(得分:4)
使用strtod
,这就是它的用途。 fgets
可以替换您的safeGetString
功能。
答案 2 :(得分:3)
任何一个:
这些sscanf中提供了最强的验证,因为如果输入不能作为double加入,则其他两个返回0.0的有效double值,而sscanf()返回与输入成功匹配的格式说明符的数量。所以:
input_valid = (sscanf( arr, "%lf", value ) != 0 ) ;
答案 3 :(得分:2)
fgets()
?atof()
。(感谢R.在第1部分修复我的愚蠢建议)