C printf右对齐括号内的数字

C printf右对齐括号内的数字,c,format,printf,C,Format,Printf,我正在写一个程序,显示数组中的所有信息。它必须从括号中的数组索引开始(例如,[2]),并且它们必须彼此右对齐 如果只是电话号码,我知道你可以: printf("%-10d", index); 但如果将括号括起来,将得到以下输出 [ 1] [ 2] ... [ 10] [ 11] 当我真的想要的时候: [1] [2] ... [10] [11] 如何执行此操作?分两

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

如果只是电话号码,我知道你可以:

printf("%-10d", index);
但如果将括号括起来,将得到以下输出

[         1]
[         2]
...
[        10]
[        11]
当我真的想要的时候:

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

如何执行此操作?

分两步执行:首先在临时缓冲区中构建一个未对齐的字符串,然后右对齐打印该字符串

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

一件简单的事情是将其分解为两个步骤:

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

您只需要一行,不需要临时字符缓冲区:

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

这并不是一项要求,但这只有在索引>0时才起作用。是的,过早的优化和过度的工程设计,使得您的代码在6个月后无法调试或维护。;-)