C语言如何用printf实现Months与Numbers数组的等距对齐排版
C语言打印列对齐实现方法
核心逻辑:通过printf格式控制符指定字符串的最小输出宽度,无需手动拼接空格,即可让不同行的月份列、冒号、数值完全对齐。
固定宽度对齐(适配当前12个月份场景)
原打印语句printf("%s: %d\n", Months[i], Numbers[i])未限制字符串输出宽度,短月份名(如May)输出后不会补占位空格,长月份名(如September)直接占满自身长度,导致排版错乱。
直接修改格式符为%-9s即可,规则说明:
- 格式符前的
-为对齐修饰符,加-为左对齐,不加则默认右对齐 9为最小输出宽度值:不足9个字符的字符串自动在右侧补空格,超出9个字符的字符串不会被截断(当前12个月份中最长的September刚好为9个字符,不会出现溢出情况)
修改后的循环打印代码:
for (int i = 0; i < 12; i++) { printf("%-9s: %d\n", Months[i], Numbers[i]); }
动态宽度对齐(适配后续内容修改场景)
如果后续可能调整月份列表、修改月份名称,手动写死宽度值容易失效,可先遍历计算最长月份的长度,动态传入宽度参数,代码无需随内容调整:
// 计算所有月份的最大字符串长度 int max_len = 0; for (int i = 0; i < 12; i++) { int len = 0; while (Months[i][len] != '\0') len++; if (len > max_len) max_len = len; } // 用*占位宽度位置,运行时传入计算得到的max_len for (int i = 0; i < 12; i++) { printf("%-*s: %d\n", max_len, Months[i], Numbers[i]); }
对齐效果示例
January : 31
February : 28
March : 31
April : 30
May : 31
June : 30
July : 31
August : 31
September: 30
October : 31
November : 30
December : 31
内容的提问来源于stack exchange,提问作者tony selcuk
相关产品推荐
相关产品推荐

