C语言实现大于10的数字也对齐的数字金字塔,避免大量IF语句
解决方法
核心逻辑是利用C语言标准库printf的固定宽度格式化输出特性,让所有数字占用相同的显示宽度,无需额外分支判断即可实现对齐。
修改点说明
- 输出数字时替换为固定宽度占位符:需要支持最大两位数字就用
%2d,每个数字固定占2个字符位,不足位数自动补空格,1位、2位数字占位长度完全一致 - 每一行的缩进削减步长和数字宽度保持一致,保证金字塔整体居中效果
完整修改后代码
#include <stdio.h> int strlen(char *str); int main(int argc, char **args){ char spaces[] = {"| "}; int i = 1, line = 1; // line为当前行输出的数字个数 while(spaces[strlen(spaces)-1] != '|'){ printf("%s", spaces); for(int k = 0; k < line; k++){ printf("%2d", i); // 固定占2位,适配最大99的数字 i++; } printf("\n"); // 每次削减2个空格,和数字宽度对应 spaces[strlen(spaces)-2] = '\0'; line += 2; } } int strlen(char *str){ int i = 0; while(*(str + i)) i++; return i; }
拓展说明
如果后续需要输出更大的数字(比如最大到三位数),仅需要同步修改两个参数即可,不需要增加任何if判断:
- 将
%2d修改为%3d - 将
spaces[strlen(spaces)-2] = '\0'中的2修改为3
内容的提问来源于stack exchange,提问作者Fuffi
相关产品推荐
相关产品推荐

