You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用printf格式化输出数组遇排版问题,求解决方案

数组打印格式化问题修复

我在做过往试题时,已经完成了核心任务,但碰到了数组打印的格式对齐问题。

当前输出

当前输出效果

期望输出

期望输出效果

急需解决这个格式问题,盼求可行方案。

原打印代码

void printArray(int tab[][MAX], int n, int m) {
    for (int j = 0; j < m; j++)
    {
        printf("%5d", j);
    }
    printf("\n");
    for (int k = 0; k < 3 * n + 4; k++)
    {
        printf("-");
    }
    printf("\n");
    for (int i = 0; i < n; i++)
    {
        printf("%2d |", i);
        for (int j = 0; j < m; j++)
        {
            printf("%3d", tab[i][j]);
        }
        printf("\n");
    }
}

问题排查与修复

对比两种输出,问题出在三个地方:

  1. 表头列号与数组元素不对齐:原表头用%5d打印列号,下方数组元素用%3d,加上行号区域的%2d |占4个字符,导致列号偏移。需要在表头前补4个空格,同时把列号格式改为%3d,和下方元素对齐。
  2. 分隔线长度计算错误:原代码用3*n+4计算分隔线长度,但实际应该是行号区域的4个字符加上每个元素的3个字符乘以列数m,即4+3*m,这样分隔线才能覆盖整个表格宽度。
  3. 可选优化:如果想要更贴近期望的排版,可以在数组元素后加一个空格,让列间距更清晰。

修复后的代码

void printArray(int tab[][MAX], int n, int m) {
    // 打印对齐的表头列号
    printf("    "); // 对应行号的%2d |(2位数字+空格+|,共4字符)
    for (int j = 0; j < m; j++)
    {
        printf("%3d", j);
    }
    printf("\n");
    // 打印匹配宽度的分隔线
    for (int k = 0; k < 4 + 3 * m; k++)
    {
        printf("-");
    }
    printf("\n");
    // 打印每行数据
    for (int i = 0; i < n; i++)
    {
        printf("%2d |", i);
        for (int j = 0; j < m; j++)
        {
            printf("%3d ", tab[i][j]); // 加空格优化列间距(可选)
        }
        printf("\n");
    }
}

内容的提问来源于stack exchange,提问作者Veanty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 14:30:40