C语言调用sscanf报invalid format string conversion错误原因是什么
报错原因
scanf/sscanf 系列函数的格式化字符串规则和 printf 系列函数不同:
printf支持通过.n语法指定输出精度,比如%.2lf表示输出双精度浮点数时保留2位小数;但scanf系列完全不支持这种.n的精度限定写法,你代码里的%.2lf属于非法的sscanf格式串,因此触发格式转换错误。
解决方案
- 第一步:先把
sscanf的格式串修改为合法的%lf,完成浮点数读取:
sscanf("0", "%lf", &rate_amount);//default to zero
- 第二步:如果业务需要保留两位小数,在读取完成后再做对应处理即可:
- 若需要对数值本身做精度截断/四舍五入:可通过数学运算实现,示例如下(需要包含
<math.h>头文件):
// 四舍五入保留两位小数 rate_amount = round(rate_amount * 100) / 100; // 向下取整保留两位小数 // rate_amount = floor(rate_amount * 100) / 100;- 若只是输出时需要显示两位小数,直接在
printf时使用%.2lf格式即可,不需要修改读取逻辑。
- 若需要对数值本身做精度截断/四舍五入:可通过数学运算实现,示例如下(需要包含
内容的提问来源于stack exchange,提问作者Jaguar Nation
相关产品推荐
相关产品推荐

