使用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


以上是使用printf函数C格式化间距的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>