You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:54:08