幾百字符串輸出時需列對齊,如表格效果。

// 左對齊,佔 20 字符寬度
printf("%-20s", str1);
// 右對齊,佔 10 字符寬度
printf("%10d", num);
// 多列組合
printf("%-20s %10d %15s\n", name, age, city);
#include <stdio.h>
#include <string.h>
#define ROWS 5
#define COLS 3
int main() {
char *data[ROWS][COLS] = {
{"Name", "Age", "City"},
{"Alice", "25", "New York"},
{"Bob", "30", "Los Angeles"},
{"Charlie", "35", "Chicago"},
{"David", "28", "Houston"}
};
int col_width[COLS] = {0};
// 1. 計算每列最大寬度
for (int c = 0; c < COLS; c++) {
for (int r = 0; r < ROWS; r++) {
int len = strlen(data[r][c]);
if (len > col_width[c]) col_width[c] = len;
}
col_width[c] += 2; // 留邊距
}
// 2. 輸出表頭
for (int c = 0; c < COLS; c++) {
printf("%-*s", col_width[c], data[0][c]);
}
printf("\n");
// 3. 輸出分隔線
for (int c = 0; c < COLS; c++) {
for (int i = 0; i < col_width[c]; i++) putchar('-');
printf(" ");
}
printf("\n");
// 4. 輸出數據行
for (int r = 1; r < ROWS; r++) {
for (int c = 0; c < COLS; c++) {
printf("%-*s", col_width[c], data[r][c]);
}
printf("\n");
}
return 0;
}
Name Age City
-------------------- ---------- ---------------
Alice 25 New York
Bob 30 Los Angeles
Charlie 35 Chicago
David 28 Houston
wcwidth 或手動統計中英文混合長度。ncurses 庫實現終端表格 UI。