我知道这是一个非常基本的问题,但我仍然有一些困惑。
char *p = malloc(100);
sprintf (p,".. %03.1f .. \n", 2.5);
结果:2.5
char *p = malloc(100);
sprintf (p,".. %05.1f .. \n", 2.5);
结果:002.5
所以,如果我说:
,我的理解是否正确%05.1
- >总共代表5个占位符,其中.
也被计算在内?答案 0 :(得分:1)
fprintf手册页显示'字段宽度。可选的十进制数字字符串(具有非零的第一个数字),指定最小字段宽度。 ......“。自'''在场上占有一席之地,应该计算在内。
答案 1 :(得分:0)
0x.yf
代表的内容是:小数点左边最多x
个数字,而y
最多代表左边的y个数字,它不计算{{1}虽然!
.
对于整数说明符(d,i,o,u,x,X) - precision指定要写入的最小位数。如果要写入的值小于此数字,则结果将使用前导零填充。即使结果较长,也不会截断该值。精度为0表示没有为值0写入字符。对于e,E和f说明符 - 这是小数点后要打印的位数。对于g和G说明符 - 这是要打印的最大有效位数。对于s - 这是要打印的最大字符数。默认情况下,将打印所有字符,直到遇到结束的空字符。对于c型 - 它没有效果。如果未指定精度,则默认值为1.如果指定的句点没有显式的精度值,则假定为0.
答案 2 :(得分:0)
在格式字符串%05.1f
中,总字段宽度将(至少)为5,小数点后将有一位数字,如果是,则字段将在左侧填零。短于5个没有填充的位置。请注意,如果数字需要超过5个位置,它将使用它们(例如,尝试打印1.2E37
)。有关完整详细信息,请阅读printf()
的POSIX规范等规范。
例如:
#include <stdio.h>
int main(void)
{
double values[] =
{
0, 0.1, -1.0, 3.1415, -99.9, -123.4, -2345.6,
88.8, 777.77, 9876.54, -1000000.2, 222333444.555,
};
enum { NUM_VALUES = sizeof(values)/sizeof(values[0]) };
for (int i = 0; i < NUM_VALUES; i++)
printf("%16.5f = %05.1f\n", values[i], values[i]);
return 0;
}
示例输出:
0.00000 = 000.0
0.10000 = 000.1
-1.00000 = -01.0
3.14150 = 003.1
-99.90000 = -99.9
-123.40000 = -123.4
-2345.60000 = -2345.6
88.80000 = 088.8
777.77000 = 777.8
9876.54000 = 9876.5
-1000000.20000 = -1000000.2
222333444.55500 = 222333444.6