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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 16:57:23