在 C 語言中的 printf 函式中對齊列

Jinku Hu 2023年10月12日
  1. 使用%{integer}d 符號來對齊 C 語言中的輸出
  2. 使用%*d 符號來對齊 C 語言中的輸出項
  3. 使用%*d%{int}d 符號來對齊表中的列
在 C 語言中的 printf 函式中對齊列

本文將演示關於如何在 C 語言的 printf 函式中對齊列的多種方法。

使用%{integer}d 符號來對齊 C 語言中的輸出

printf 是標準 I/O 庫的一部分,可以利用它將格式化的字串輸出到 stdout 流。stdout 流是有緩衝的;因此,如果字串不包括換行符,可能會有延遲。通常,給定的字串不會被列印,直到內部緩衝區沒有被填滿;只有在這之後,內容才會被寫入 stdout 流。

printf 使用以%字元開頭的格式指定符來控制字串的格式。除了內建資料型別的不同指定符外,一些符號還可以新增各種功能,如對齊和填充。在這種情況下,我們在%和格式指定符字元之間插入給定的整數,以表示輸出項左側要填充的空格數。因此,我們可以在多行輸出中包含相同的數字,以使條目向右對齊。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char const *argv[]) {
  int mm1 = 11011;
  int mm2 = 111;
  int mm3 = 11;

  printf("%10d %d\n", mm1, mm1);
  printf("%10d %d\n", mm2, mm2);
  printf("%10d %d\n", mm3, mm3);

  exit(EXIT_SUCCESS);
}

輸出:

11011 11011
  111 111
   11 11

使用%*d 符號來對齊 C 語言中的輸出項

另外,使用%*d 符號也可以實現同樣的格式化,它還要求提供整數,因為資料引數是在逗號之後。但請注意,如果多個格式指定符包括%字元,它們都需要在相應的引數前包括一個單獨的整數值。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char const *argv[]) {
  int mm1 = 11011;
  int mm2 = 111;
  int mm3 = 11;

  printf("%*d %d\n", 10, mm1, mm1);
  printf("%*d %d\n", 10, mm2, mm2);
  printf("%*d %d\n\n", 10, mm3, mm3);

  exit(EXIT_SUCCESS);
}

輸出:

11011 11011
  111 111
   11 11

使用%*d%{int}d 符號來對齊表中的列

最後,我們可以在不同的情況下結合這兩種方法,在任何文字表輸出中對列進行對齊。注意,有時需要將列項向左對齊。我們可以通過在格式指定符之間插入負整數值或者用%*d 符號作為引數傳遞來實現。當填充不為常量且可以在執行時動態計算時,後一種解決方案更為合適。

#include <stdio.h>
#include <stdlib.h>

#ifndef MAX
#define MAX 10
#endif

int main(int argc, char const *argv[]) {
  char *row1[] = {"num", "name", "sum"};
  int col1[] = {1, 2, 3};
  char *col2[] = {"one", "two", "three"};
  int col3[] = {1243, 14234, 3324};

  printf("%*s | %*s | %*s\n", -3, row1[0], -MAX, row1[1], MAX, row1[2]);
  printf("%*c | %*c | %*c\n", -3, '-', -MAX, '-', MAX, '-');
  size_t len = sizeof col1 / sizeof col1[0];
  for (int i = 0; i < len; ++i) {
    printf("%-3d | %-10s | %10d\n", col1[i], col2[i], col3[i]);
  }

  exit(EXIT_SUCCESS);
}

輸出:

num | name       |        sum
-   | -          |          -
1   | one        |       1243
2   | two        |      14234
3   | three      |       3324
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook

相關文章 - C IO