如果数字非零则如何打印,否则使用printf打印?

asw*_*win -2 c printf ternary-operator conditional-operator

我有以下功能,如果我的值是0,它会给出一些奇怪的输出.有人可以解释一下为什么这表现得很奇怪吗?我的意图是仅在非零值时打印该值,否则应为空白

# include<stdio.h>

int main(int argc, char *argv[]) {
    int i=0;
    printf("Number is %d\n", i ? i : "");
    return 0;
}

-> gcc print.c
print.c: In function 'main':
print.c:5: warning: pointer/integer type mismatch in conditional expression
-> ./a.out
Number is 4195848
Run Code Online (Sandbox Code Playgroud)

我知道我可以像下面这样做,但我想用上面的逻辑做同样的事情

if(i != 0) {
    printf("%d", i);
} else {
    printf("%s", "");

}
Run Code Online (Sandbox Code Playgroud)

ric*_*ici 5

指定精度为0:

printf("Number is %.0d\n", i);
Run Code Online (Sandbox Code Playgroud)

根据C标准对d格式代码的描述,重点补充(§7.21.6.3):

int参数将转换为在风格"[ - ] DDDD"一个符号的十进制.精度指定要显示的最小位数; 如果转换的值可以用较少的数字表示,则应使用前导零进行扩展.默认精度为1. 使用显式精度零转换零的结果不应为字符.

此功能printf偶尔会有用,特别是在生成要在其中0打印条目的表格输出时.格式代码例如%8.0d将对8字符字段中的整数值进行右对齐,如果值为0则打印8个空格.(字段宽度应用于转换后的值.)