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

CS50 C语言pset1代码问题:为何打印哈希块而非金字塔?

CS50 Pset1 金字塔打印问题排查与修复

首先看你贴出的代码,这段代码运行后输入高度3,输出应该是:

#
##
###

也就是每行#的数量是1、2、3个,和你预期的一致。但你说实际每行都输出3个#,说明你实际运行的代码和贴出来的版本不一致,大概率是内层循环的条件写错了——比如把column <= row误写成了column < height或者column <= height-1,这样每行都会打印和高度数相同的#。

如果你是要打印CS50 Pset1要求的标准左对齐金字塔(带前导空格,比如高度3时输出如下):

#
 ##
###

那你当前的代码确实缺少了前导空格的打印逻辑,需要补充一个打印空格的内层循环:

修改后的完整代码

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

int main(void)
{
    int height, row, column;
    do
    {
        height = get_int("Height: ");
    }
    while (height < 1 || height > 8);

    for (row = 0; row < height; row++)
    {
        // 打印前导空格
        for (column = 0; column < height - row - 1; column++)
        {
            printf(" ");
        }
        // 打印哈希块
        for (column = 0; column <= row; column++)
        {
            printf("#");
        }
        printf("\n");
    }
}

关键逻辑说明

  • 第一个内层循环负责生成每行的前导空格:空格数量为height - row - 1,随着row递增,空格数递减,保证金字塔的右对齐效果。
  • 你原有的内层循环逻辑是正确的:column每次从0开始初始化,循环条件column <= row确保每行打印的#数量等于当前行号+1(因为row从0开始)。你怀疑的column初始化部分没有问题,问题要么是循环条件写错,要么是缺少了空格打印的步骤。

内容的提问来源于stack exchange,提问作者mell0w25

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 03:33:11