CS50 Mario less问题:代码输出全打印在单行的错误排查
问题根因
所有打印内容挤在同一行的核心原因是外层循环的作用域范围错误,换行符执行位置不对,具体问题:
- 你写的
printf("\n");位于外层遍历行的for循环大括号外部,只有等所有行的空格、#全部打印完成后,才会执行唯一一次换行,所有内容自然堆在同一行。 - 代码缩进混乱,内层循环、条件判断都没有显式添加花括号,很容易误判代码执行顺序,触发其他逻辑错误。
修正后代码
#include <cs50.h> #include <stdio.h> int main(void) { int n; do { n = get_int("Height: "); } while ((n < 1) || (n > 8)); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (i + j < n - 1) { printf(" "); } else { printf("#"); } } // 每打印完一整行再换行,换行逻辑放在外层循环内部 printf("\n"); } }
修正点说明
- 调整外层
for循环的闭合大括号位置,把换行打印逻辑包含进外层循环的作用域内,每打印完一行的所有字符就执行一次换行。 - 给所有循环、条件判断语句补全显式花括号,统一代码缩进,避免后续修改时因为作用域不清晰出现低级bug。
内容的提问来源于stack exchange,提问作者Prateek Chaturvedi
相关产品推荐
相关产品推荐

