You need to enable JavaScript to run this app. C语言如何用printf实现Months与Numbers数组的等距对齐排版
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 13:54:07