C语言从字符串提取浮点数仅返回整数,求技术解决方案
问题分析与解决方案
嘿,我帮你排查了下代码,其实你的代码逻辑本身是没问题的——它确实能正确读取浮点数值,但你觉得“只返回整数类型结果”,大概率是这几个原因之一:
可能的问题原因
- 你输入的就是整数:比如你输入
5而不是5.6,程序会返回5.000,这是浮点数的正常表示,只是小数位都是0而已,并非真的变成了整数类型。 - 你用了逗号作为小数点:很多地区习惯用逗号(比如
3,14)代替点号,但C语言的sscanf默认只认.作为小数点,这时候它会只读取逗号前的整数部分,导致你看到的结果像是整数。
对应的解决办法
- 如果是第一种情况,完全不用担心——这是浮点数的正常行为,
5.000本身就是合法的浮点数结果。 - 如果是第二种情况,你可以在读取输入后,先把字符串里的逗号替换成点号,再进行解析。修改后的
daNum函数如下:
float daNum(void) { char store[121] = {0}; float numba = 0; int const kInvalInput = -5; fgets(store, 121, stdin); // 把输入里的逗号替换成点号,适配不同地区的小数点习惯 for (int i = 0; store[i] != '\0'; i++) { if (store[i] == ',') { store[i] = '.'; } } if( sscanf(store, "%f", &numba) != 1) { numba = kInvalInput; } return numba; }
测试验证
比如你输入3,14,这段代码会先把它转换成3.14,最终输出your value is:3.140,就能得到正确的浮点结果啦。
内容的提问来源于stack exchange,提问作者JeanBook
相关产品推荐
相关产品推荐

