如何从格式打印固定长度的输出

时间:2014-11-21 17:50:11

标签: c

以下代码:

printf("%d. %-10s:", 1, "Test");

生成此输出:

1. Test      :// 14 characters long

我想要整个格式`%d的输出长度。 %-10s:"恰好是这样的10个字符:

1. Test:  // 10 characters

注意:

数字长度不一,可能是1或100,所以我无法从输出中推断出它的长度。

我该怎么做?

1 个答案:

答案 0 :(得分:3)

您需要使用两个步骤:

char buffer[20];
snprintf(buffer, sizeof(buffer), "%d. %s:", 1, "Test");
printf("%-*s", 10, buffer);

snprintf()操作会在1. Test:中为您提供字符串buffer;请注意,它在输出中包含:,并假设字符串"Test"上没有尾随空白)。 printf()操作将字符串左对齐(-)格式化为(至少)10(格式中的*和参数列表中的10)的长度到标准输出。据推测,在同一行输出后会出现其他内容;否则,空白填充没有明显的意义。

有关完整信息,请参阅:

这包括*printf()函数族的基本操作(但不列出v*printf()*wprintf()函数族的接口。

问题和上面答案中的代码都是用常量完成的。更现实的情况是:

void format_item(int number, const char *text, int width)
{
    char buffer[width+1];  // C99 VLA
    snprintf(buffer, sizeof(buffer), "%d. %s:", number, text);
    printf("%-*s", width, buffer);
}

请注意,如果数字加上字符串太长,此代码会截断格式化数据。如果你的工作有点困难(例如在1的定义中添加超过widthbuffer - 可能会增加15而不是1)。

你可以写:

format_item(1, "Test", 10);

或:

char *str_var = …some function call, perhaps…
int item = 56;
format_item(++item, str_var, 20);