【发布时间】:2016-02-07 03:24:10
【问题描述】:
我正在创建一个简单的控制台应用程序,它的 char *argv[] 应该是浮点数的形式(例如 5.234、7.197 等)
为了确保程序只接收真正有效的浮点数的用户输入,我创建了一个结合 sscanf(参考:character array to floating point conversion)和有效范围检查(参考:How can I check if a string can be converted to a float?)结果的函数。
//buffer comes from agrv[n]
char MyFloatCheck(char* buffer)
{
float f;
char result;
result = sscanf(buffer, "%f", &f);
result &= isRangeValid(buffer);
return result;
}
然后我测试了上面的函数:
- 有效输入:12.15
- 非常大的输入:4 x 10^40
- 输入无效:(a) ab19.114, (b) 19.114ab
我的测试 1、2 和 3(a) 的结果是预期的:
- 1
- 0(因为太大了)
- (a) 0(因为它包含数字前面的无效字符)
但是 3 (b) 的结果出乎意料:
- (b) 1 (??)
我的问题是: 1. 为什么会这样? 2. 有没有内置的方法来检查这种输入错误? 3. 有没有完善的解决方法?
我正在考虑制作自己的函数,从右端检查字符以查看它是否包含无效字符,但如果有任何可用的内置方法,我宁愿使用它。
【问题讨论】:
标签: c arrays floating-point