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

CS50 Pset1 Mario More 右侧金字塔输出异常问题求提示

CS50 Pset1 Mario More 右侧金字塔形状异常排查提示

问题现象:左侧金字塔、中间双空格分隔输出正常,右侧金字塔输出为矩形

你当前编写的代码如下:

#include <cs50.h>
#include <stdio.h>

int main(void)
{
    int height, i2, i;
    do
    {
        height = get_int("Height: ");
    }
    while(height < 1 || height > 8);
    for(i = 0; i < height; i++)
    {
        printf("\n");
        for(int o = 0; o < height - i - 1; o++)
        {
            printf(" ");
        }
        for(int j = 0; j <= i; j++)
        {
            printf("#");
        }
        printf("  ");
        for(i2 = 0; i2 < height; i2++)
        {
            //printf("\n");
            for(int j2 = 0; j2 <= i2; j2++)
            {
                printf("#");
            }
        }
    }
    printf("\n");
}

针对性排查提示(无完整题解)

  • 先复盘左侧金字塔正常运行的核心逻辑:每一行要打印的#数量完全由当前所在的行序号决定,第i行(从0开始计数)只需要打印i+1个#,打印完就结束当前行的右侧部分,等下一轮外层循环进入下一行,再打印下一行对应数量的#。
  • 检查你写的右侧金字塔外层循环终止条件:现在的写法是i2 < height,等于你在同一行内,把从第0行到最后一行所有需要打印的#一次性全输出了,这就是右侧变成实心矩形的核心原因——你没有让右侧打印的#数量和当前正在处理的行号i绑定,反而在单行内跑满了所有行的打印量。
  • 你可以临时加一行调试代码:在右侧打印#的语句旁边,顺带打印当前的i2值,运行后就能直观看到,同一行里i2会从0一直递增到height-1,把所有层级的#都堆在了同一行。
  • 先把代码里错乱的大括号缩进、对应关系理清楚,现在右侧循环部分的大括号嵌套层级是混乱的,理清层级后你会更容易发现哪段逻辑应该属于「单行打印」的范畴,哪段逻辑应该跨多行运行。
  • 顺带检查换行符的位置:你现在把换行放在了最外层行循环的开头,末尾又额外加了一个换行,很容易出现第一行是空行的格式问题,可以顺带着调整。

内容的提问来源于stack exchange,提问作者Salah Addin Al Ayubi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:27:29