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
相关产品推荐
相关产品推荐

