是否有 "branching" 字符串格式描述符?

Is there a "branching" string format descriptor?

我刚刚做了这个

printf( (n==0) ? " %d" : " %3d", n );

但是有条件格式描述符吗?

所以,这意味着类似 "if this is very short use such and such padding, but, if this is longer use such and such padding."

可以吗?

没有条件,但您可以使用 * 指定参数中的宽度。例如:

printf(" %*d", (n==0)?1:3, n);

您可以使用 *:

将字段宽度作为参数传递
printf("%*d", length, n);

其他答案已经指出字段宽度修饰符*

由于您要比较 zero/nonzero 以确定长度,您甚至可以将 n 的值破解为布尔值(10),然后乘以你想要的长度:

printf("%*d", !!n*3, n);