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

时间:2016-07-12 03:36:47

标签: c printf ternary-operator conditional-operator

我有以下功能,如果i值为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

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

做同样的事情
if(i != 0) {
    printf("%d", i);
} else {
    printf("%s", "");

}

4 个答案:

答案 0 :(得分:5)

指定精度0:

printf("Number is %.0d\n", i);

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

  

int参数应转换为样式为“[ - ] dddd”的带符号小数。精度指定要显示的最小位数;如果转换的值可以用较少的数字表示,则应使用前导零进行扩展。默认精度为1. 使用显式精度零转换零的结果不应为字符。

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

答案 1 :(得分:2)

如果必须使用conditional statement,您可以根据printf()的值计划控制整个i,例如

int i=0;
i? printf("Number is %d\n", i): (void)i;
return 0;

或者,如果您希望始终打印Number is,请使用

int i=0;
i? printf("Number is %d\n", i): puts("Number is");
return 0;

答案 2 :(得分:0)

也许是这样的:

int main(void)
{
    int i = 30;
    return (i != 0) ? printf("Number is: %d", i) : i;
}

答案 3 :(得分:0)

回答这个愚蠢的问题(不妨把我的帽子扔进戒指)

i && printf("Number is %d\n", i);

也摆脱了三元运算符!