C语言用for/while/do-while循环实现指定金字塔数字图案问题
问题原因
你的代码排版错乱的核心原因是默认所有输出数字都只占1个字符宽度:当n≤9时所有数字都是1位,排版自然正常;但n≥10之后,10及以上的数字是两位数,单个数占2个字符宽度,而你前面打印的前置空格还是按每个数字占1位的逻辑计算输出,自然就会出现错位。
修复方案
统一所有数字的输出宽度,同时对应调整前置空格的占位宽度即可,这里我们统一设置为占2位输出,修改后代码如下:
#include <stdio.h> int main(void) { // 可自行修改n的值测试效果 int n = 10, i, j, num = 1, gap; gap = n - 1; for ( j = 1 ; j <= n ; j++ ) { num = j; // 每个前置位置输出2个空格,和后面数字的2位宽度对应 for ( i = 1 ; i <= gap ; i++ ) printf(" "); gap --; for ( i = 1 ; i <= j ; i++ ) { // 固定2位宽度输出数字 printf("%2d", num); num++; } num--; num--; for ( i = 1 ; i < j ; i++) { printf("%2d", num); num--; } printf("\n"); } return 0; }
补充说明
如果后续需要支持n≥100的场景,只需要对应把输出宽度调整为3位(格式符改为%3d),前置空格也对应改为每次输出3个空格即可。
内容的提问来源于stack exchange,提问作者notme121
相关产品推荐
相关产品推荐

