C语言打印金字塔异常:首行空白、输出行数不符
解决金字塔打印首行空白、行数不足的问题
问题原因
你的代码核心问题出在循环的起始值和条件设置上:
- 外层循环
i从0开始,当i=0时,内层循环j < 0的条件不成立,首行不会打印任何#,直接输出空行。 - 外层循环执行
n次(i从0到n-1),但每次打印的#数量等于i的值,最后一行只有n-1个#,比预期少1个,整体看起来少了一行有效内容。
修改方案
有两种简单的修正方式,任选其一即可:
方式一:调整外层循环范围
把外层循环的起始值改为1,结束条件改为i <= n,让i从1遍历到n,正好对应每行需要打印的#数量:
#include <cs50.h> #include <stdio.h> int main(void) { int n, i, j; do { n = get_int("height: "); } while (n < 1 || n > 8); for (i = 1; i <= n; i++) { for (j = 0; j < i; j++) { printf("#"); } printf("\n"); } }
方式二:调整内层循环条件
保持外层循环不变,把内层循环的条件改为j < i + 1,这样即使i=0时,也会执行1次循环,打印1个#:
#include <cs50.h> #include <stdio.h> int main(void) { int n, i, j; do { n = get_int("height: "); } while (n < 1 || n > 8); for (i = 0; i < n; i++) { for (j = 0; j < i + 1; j++) { printf("#"); } printf("\n"); } }
验证结果
输入高度5时,两种修改后的代码都会输出:
内容的提问来源于stack exchange,提问作者ahmedd_asimm
相关产品推荐
相关产品推荐

