printf右对齐一个括号内的数字

时间:2012-09-03 20:00:51

标签: c format printf

我正在编写一个显示数组中所有信息的程序。它必须从括号中的数组索引开始(例如[2]),并且它们必须彼此正确对齐。

如果只是数字,我知道你可以这样做:

printf("%-10d", index);

但是将括号括起来会产生以下输出

[         1]
[         2]
...
[        10]
[        11]

当我真的想要它时:

         [1]
         [2]
...
        [10]
        [11]

我该怎么做?

3 个答案:

答案 0 :(得分:8)

分两步完成:首先在临时缓冲区中构建一个非对齐字符串,然后将字符串右对齐打印。

char buf[sizeof(index) * (CHAR_BITS + 2) / 3 + 4];
sprintf(buf, "[%d]", index);
printf("%-12s", buf);

答案 1 :(得分:2)

一件容易的事就是将其分解为两个步骤:

char tmp[128];
sprintf(tmp, "[%d]", index);
printf("%-10s", tmp);

答案 2 :(得分:2)

你只需要一行和没有临时字符缓冲区:

printf("%*s[%d]\n",12-(int)log10(index),"",index);