使用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"); } }
问题排查与修复
对比两种输出,问题出在三个地方:
- 表头列号与数组元素不对齐:原表头用
%5d打印列号,下方数组元素用%3d,加上行号区域的%2d |占4个字符,导致列号偏移。需要在表头前补4个空格,同时把列号格式改为%3d,和下方元素对齐。 - 分隔线长度计算错误:原代码用
3*n+4计算分隔线长度,但实际应该是行号区域的4个字符加上每个元素的3个字符乘以列数m,即4+3*m,这样分隔线才能覆盖整个表格宽度。 - 可选优化:如果想要更贴近期望的排版,可以在数组元素后加一个空格,让列间距更清晰。
修复后的代码
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
相关产品推荐
相关产品推荐

