C语言实现指定高度的@字符楼梯图案问题求助
问题分析
- 循环变量逻辑冲突:外层while循环用
width作为计数变量,内层for循环又将width重置为0,导致外层循环仅执行1次就终止 - 空格打印规则错误:当前每行固定打印1个空格,实际要求第1行0个空格、第2行1个空格、第N行N-1个空格,再输出
@字符 - 换行位置错误:连续在for循环内打印换行,完全打乱了每行的输出结构
同类图案打印通用思路
所有固定规则的字符图案输出,都可以套用两层循环的框架:
- 外层循环控制行数:高度为多少就循环多少次,每轮循环对应输出完整的一行
- 内层循环控制单行内容:按照需求先打印前置填充字符(这里是空格),再打印目标字符(这里是
@),单行内容打印完成后统一输出换行
修正后完整代码
#include <cs50.h> #include <stdio.h> int main(void) { int height; // 输入校验逻辑保留,你原来的这部分是正确的 do { height = get_int("Height: "); } while(height > 8 || height <= 0); // 外层循环:控制行数,i从0到height-1,共height次 for(int i = 0; i < height; i++) { // 内层循环1:打印当前行的前置空格,第i行(从0数)需要i个空格 for(int j = 0; j < i; j++) { printf(" "); } // 打印@字符 printf("@"); // 单行结束,打印换行 printf("\n"); } }
逻辑验证(以height=3为例)
- i=0(第1行):内层空格循环j<0不执行,直接打印
@加换行,输出@ - i=1(第2行):内层空格循环j=0执行1次,打印1个空格后输出
@加换行,输出@ - i=2(第3行):内层空格循环j=0、1执行2次,打印2个空格后输出
@加换行,输出@
和你需要的效果完全一致。
内容的提问来源于stack exchange,提问作者Hyakkimaru
相关产品推荐
相关产品推荐

