参数化printf中的格式说明符

我有几行输出如下:

printf("%-20s %-20s %-20s %-20s %-20s \n", "Identity", "Identity", "float", "double", "long double"); printf("%-20s %-20s %-20s %-20s %-20s \n", "Number", "LHS", "error", "error", "error"); 

如你所见,如果我想改变它们之间的间距,我将不得不将数字改为20次。 有没有办法参数化格式说明符? 那么只改变一次会改变它们吗?

是的,您可以将字段宽度设为星号( * ),并将值作为int参数提供。 就像是

 printf("%-*s \n", width, "Identity"); 

其中widthint类型,包含字段宽度值。 您可以更改width值以更改字段宽度。

引用关于此的C11标准,章节§7.21.6.1, fprintf()

可选的最小 字段宽度 。 […]字段宽度采用星号* (稍后描述)或非负十进制整数的forms。

和相关的,

如上所述,字段宽度或精度或两者可以用星号表示。 在这种情况下, int参数提供字段宽度或精度。[…]