我刚刚在C99 ISO标准7.19.6.1 The fprintf function
第6小节中发现了以下内容,详细说明了转换标志,特别是0
标志:
0: d,i,o,u,x,X,a,A,e,E,f,F,g和G转换,前导零(跟随任何符号指示)或者基数)用于填充场宽而不是执行空间填充,除非转换无穷大或NaN。
到目前为止,我知道以下几行将产生显示的输出:
printf ("%5d\n", 7); // produces " 7"
printf ("%05d\n",7); // produces "00007"
但是,在第8小节详述转换修饰符时,我看到:
d,i: int参数在样式[ - ] dddd中转换为带符号的十进制数。精度指定要显示的最小位数;如果转换的值可以用较少的数字表示,则使用前导零进行扩展。
显然并非如此,因为默认行为是使用空格填充,不是零。或者我在这里误读了什么?
答案 0 :(得分:7)
您会混淆精度和字段宽度:
printf("%.5i", 1); // prints "00001", precision = 5
printf("%5i", 1); // prints " 1", field width = 5
printf("%5.3i", 1); // prints " 001", field width = 5, precision = 3