我有这个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循环中,因此它为指针列表打印多行。
问题在于,如果打印的某些内容更长或更短,则会导致事物无法排列。如何让它始终排队?
答案 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个字符打印,并且不会按照您希望的方式排列。