C语言中%d和%.d的区别

Dee*_*ire 1 c format-specifiers

我编写了以下代码并收到一个空白输出

int main(){

    int y=0;

    printf("%.d", y);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

相反,如果我只使用%d,我会得到0作为输出。

是什么区别%d%.d

非常感谢您的建议!

kay*_*lum 5

.转换说明符之前的A称为“精度”。从printf 手册页(强调我的):

可选精度,形式为句点 ('.') 后跟可选的十进制数字字符串。代替十进制数字字符串,可以写“*”或“*m$”(对于某些十进​​制整数 m)来指定精度分别在下一个参数或第 m 个参数中给出,它们必须是类型为 int。如果精度仅以“.”形式给出 ,或者精度为负,则精度为零。这给出了 d、i、o、u、x 和 X 转换出现的最小位数

d,我

int 参数被转换为有符号十进制表示法。精度(如果有)给出必须出现的最小位数;如果转换后的值需要较少的数字,则在左侧用零填充。默认精度为 1。当 0 以显式精度 0 打印时,输出为空

所以对于示例代码,%.d意味着零精度的整数转换。零精度意味着最少为零位。由于要转换的值是0零精度,因此根本不显示。相比之下,%d没有明确的精度,因此默认精度为 1,导致打印0