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)
指定精度为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个空格.(字段宽度应用于转换后的值.)