首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言大量字符串輸出對齊:printf 格式控制實現表格效果

     編輯:程式設計綜合問答

需求

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

期望效果

核心方法:printf 寬度佔位符

// 左對齊,佔 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       

進階建議

  • 中文字符佔 2 字節,寬度計算需用 wcwidth 或手動統計中英文混合長度。
  • 大數據量時,先存入結構體數組,再統一格式化輸出。
  • 跨平台對齊可考慮 ncurses 庫實現終端表格 UI。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved