我编写了以下代码,并收到了空白输出:
int main(){
int y=0;
printf("%.d", y);
return 0;
}
相反,如果我仅使用%d
,则会得到0
作为输出。
%d
和%.d
有什么区别。
非常感谢您的建议!
答案 0 :(得分:5)
转换说明符之前的.
被称为“精度”。来自printf man page(重点是我):
可选的精度,以句点('。')的形式,后跟可选的十进制数字字符串。代替十进制数字字符串,可以写“ *”或“ * m $”(对于某些十进制整数m)来指定精度分别在下一个参数或第m个参数中给出。类型为int。 如果精度仅给出'。',或者精度为负数,则精度将为零。这给出了d,i,o,u,x和X转换出现的最小位数,
和
d,我
int参数将转换为带符号的十进制表示法。精度(如果有的话)给出了必须出现的最小位数。如果转换后的值需要较少的数字,则在左边用零填充。 默认精度为1。当以明确精度0打印0时,输出为空
因此对于示例代码,%.d
表示精度为零的整数转换。零精度表示最少为零位数。由于要转换的值为0
,因此由于零精度而根本不显示。相反,%d
没有明确的精度,因此默认为1的精度,从而导致打印0
。