我一直在尝试取双精度值 1200.00 而不是 1200.00000000,这个值需要放到另一个文件中。但是我做不到
我尝试在我的代码中使用
%.2lf
,例如:
fscanf(file, "%.2lf", &items[i].cost);
但是我得到一个错误
转换规范
"%.2lf"
对于标准C或POSIX中的fscanf()
无效-点不是可以出现在fscanf()
转换规范中的字符之一:
每个转换规范由字符'
'[CX]⌦或字符序列“%
”,⌫引入,之后依次出现:%n$
一个可选的赋值抑制字符'*'。
指定最大字段宽度的可选非零十进制整数。
[CX] ⌦ 一个可选的分配分配字符“m”。 ⌫
一个选项长度修饰符,指定接收对象的大小。
一个转换说明符,指定要应用的转换类型。有效的转换说明符如下所述。
你没有显示你检查过你对
fscanf()
的调用是否成功——如果成功,它应该返回 1
。阅读不受字段宽度(要阅读的最大字符数)的限制,除非您的图书馆将 .2
解释为等同于 2
(有效地忽略点)。没有办法将读取的数据限制为小数点后 2 位——除非输入数据是带前导零的固定宽度,这样使用 %7lf
将跳过空格并读取 7 个字符作为数字 (1200.00
) ,留下任何其他的输入操作来处理。请记住,%a
、%e
、%f
和 %g
转换是可以互换的;它们都识别固定格式、指数格式或十六进制格式的浮点输入字符串。
您还没有解释如何获得输出值
1200.00000000
。这通常是因为您指定了 fprintf()
转换规范,例如 %14.8f
,它在小数点后打印 8 个字符。
所以:
fscanf()
的返回值。