我一直在想,为什么printf("%.d", 0);
什么都不输出,而它输出任何其他数字比0,printf("%d", 0);
输出'0'如预期。printf 0与0精度
2个代码之间的唯一区别是精度。以下是关于精度的文档说明:
可选精度,以句点形式表示。随后是一个 可选数字字符串。如果数字串被省略,则精度为 被视为零。这给出了的最小数字数字出现 d,i,o,u,x和X转换。
在这种情况下,精度应该被忽略,否?
我一直在想,为什么printf("%.d", 0);
什么都不输出,而它输出任何其他数字比0,printf("%d", 0);
输出'0'如预期。printf 0与0精度
2个代码之间的唯一区别是精度。以下是关于精度的文档说明:
可选精度,以句点形式表示。随后是一个 可选数字字符串。如果数字串被省略,则精度为 被视为零。这给出了的最小数字数字出现 d,i,o,u,x和X转换。
在这种情况下,精度应该被忽略,否?
从文档(重点煤矿):
对于整数说明符(d,I,O,U,X,X):精度指定要被写入的最小位数。如果要写入的值小于此数字,则结果将用前导零填充。即使结果更长,值也不会被截断。 0精度意味着没有字符的值写入0
不知道为什么,虽然,可能有与C的方式做处理NULL指针,或作为@TripeHound指出的那样,可能是一个设计决定。
好的,那么我也许应该停止在我的电脑上使用这个人;) – realUser404
你的电脑上的那个人是指基本的printf函数,而不是c包装。我猜测0和NULL之间有冲突;如果你有时间'info coreutils'printf invocation''给你完整的手册页。 –
我的猜测是,它与NULL无关,只是为了让您可以选择将零值作为空白(如电子表格倾向于允许的)。 – TripeHound
您可能想要阅读其他一些文档,例如[this one](http://en.cppreference.com/w/c/io/fprintf)(通常非常准确),其中说“如果两个转换后的值和精度为0,则转换结果不包含任何字符。“ –