如何更好地格式化printf语句,以便总是排队

时间:2009-12-03 08:08:37

标签: c formatting printf

我有这个printf声明:

 printf("name: %s\t"
        "args: %s\t"
        "value %d\t"
        "arraysize %d\t"
        "scope %d\n",
         sp->name,
         sp->args,
         sp->value,
         sp->arraysize,
         sp->scope);

它在for循环中,因此它为指针列表打印多行。

问题在于,如果打印的某些内容更长或更短,则会导致事物无法排列。如何让它始终排队?

3 个答案:

答案 0 :(得分:8)

每个转换说明符都可以给出一个字段宽度,它给出了转换将使用的最小字符数。还有其他标志和精度可用于控制输出(例如,使用%s转换时,精度项表示将使用最多字符数。)

printf("name: %20.20s\t"
        "args: %10.10s\t"
        "value %6d\t"
        "arraysize %6d\t"
        "scope %6d\n",
         sp->name,
         sp->args,
         sp->value,
         sp->arraysize,
         sp->scope);

答案 1 :(得分:3)

使用特定数字表示字符串的最大长度,在本例中为12:

printf("name: %12s", sp->name);

答案 2 :(得分:3)

像dtrosset所说:

printf("name: %12s\t"
       // etc...

以下是有关printf格式字符串的一些文档:

http://www.cplusplus.com/reference/clibrary/cstdio/printf/

只需确保您指定的字段宽度大于您希望打印的字段宽度。例如,如果指定%2d,然后打印555,即使其余字段为2个字符,它仍将以3个字符打印,并且不会按照您希望的方式排列。