如何将以固定宽度填充空格的数字居中?

时间:2014-06-02 23:18:59

标签: c printf

我试图做这样的事情

aligned numbers

但是我无法想到要做到通用数字的事情。看,我得到了数字可以容纳的最大空间(在这种情况下,长度是4)。但是它里面的数字可以有任何小于或等于(空格 - 2)的长度,所以它可以适应而不会触及边界。我需要将每个方格中的数字居中,无论它有多少个字符。

我在第一行尝试了类似的东西:

printf("    ");
for (i = 0; i < columns; i++) {
    printf(" ");
    printf("%*d", length, i);
    printf(" ");
}

但它不会在中心对齐数字,而是在右边。我该怎么办?

1 个答案:

答案 0 :(得分:5)

应该做的事情(检查错误):

#include <stdio.h>
#include <assert.h>

#define BUFSIZE 20

void print_centered(size_t width, int num) {
  char buffer[BUFSIZE];
  int len;
  int padding_left, padding_right;

  assert(width < BUFSIZE);

  len = snprintf(buffer, BUFSIZE, "%d", num);
  padding_left = (width - len) / 2;
  padding_right = width - len - padding_left;

  (void)snprintf(buffer, BUFSIZE, "%*d%*s", len + padding_left, num, padding_right, padding_right ? " " : "");
  printf("%s", buffer);
}

int main(int argc, char **argv) {
  printf("|");
  print_centered(10, 123);
  printf("|\n");

  printf("|");
  print_centered(10, 1234);
  printf("|\n");

  printf("|");
  print_centered(10, 1234567890);
  printf("|\n");

  return 0;
}

输出:

|   123    |
|   1234   |
|1234567890|