参数化printf中的格式说明符

时间:2016-02-17 16:32:42

标签: c format 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次。有没有办法参数化格式说明符?那么只改变一次会改变它们吗?

1 个答案:

答案 0 :(得分:8)

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

这样的东西
printf("%-*s \n", width, "Identity");

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

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

  

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

和相关,

  

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