使用printf函数C格式化间距
如何创建一个代码,其中的的间距Numbers,并Months为彼此等距。代码源代码已在issue的回答中得到。
#include <stdio.h>
#define MAX_LEN 32
int main() {
int Numbers[12] = {3, 4, 5, 1, 2, 7, 8, 9, 3, 4, 7, 8};
char Months[][MAX_LEN] = {"Jan", "Feb", "March", "April",
"May", "June", "July", "August",
"September", "October", "November", "December"};
for (int i = 0; i < 12; i++)
printf("%s: %dn", Months[i], Numbers[i]);
return 0;
}
输出
Jan: 3
Feb: 4
March: 5
April: 1
May: 2
June: 7
July: 8
August: 9
September: 3
October: 4
November: 7
December: 8
预期输出:
Jan: 3
Feb: 4
March: 5
April: 1
May: 2
June: 7
July: 8
August: 9
September: 3
October: 4
November: 7
December: 8
回答
您可以在格式字符串中使用额外的修饰符来printf()正确对齐内容:
- 要打印特定宽度的内容,请在格式化字符之前将宽度作为整数添加:例如,
%10s将字符串打印到宽度为 10 的(最大)列,向左填充空格。如果您的字符串超过 10 个字符,它会打印完整的字符串,但请记住这一点。所以你的特定例子:
char Months[][MAX_LEN] = {"Jan", "Feb", "March", "April",
"May", "June", "July", "August",
"September", "October", "November", "December"};
for (int i = 0; i < 12; i++) {
/* Note the 10 here! */
printf("%10s: %dn", Months[i], Numbers[i]);
}
结果是
Jan: 3
Feb: 4
March: 5
April: 1
May: 2
June: 7
July: 8
August: 9
September: 3
October: 4
November: 7
December: 8
如果你想左对齐你的字符串,你简单地-在整数值前加上 a ,即:
printf("%-10s: %dn", Months[i], Numbers[i]);
其中产生
Jan : 3
Feb : 4
March : 5
April : 1
May : 2
June : 7
July : 8
August : 9
September : 3
October : 4
November : 7
December : 8
- 或者,您也可以使用
*允许您在printf()呼叫中声明要填充的长度。要使用它,您需要计算您希望填充的长度作为额外参数:
int myPadWidth = 15;
/* calculate the length of Months[i] each loop and cast size_t result to int */
int lenMonths = (int)strlen(Months[i]);
/* Note the extra argument in the printf call here! */
printf("%s: %*dn",Months[i],myPadWidth-lenMonths,Numbers[i]);
这会导致
Jan: 3
Feb: 4
March: 5
April: 1
May: 2
June: 7
July: 8
August: 9
September: 3
October: 4
November: 7
December: 8