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个月后无法调试或维护。;-)