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

C语言海龟绘图程序数组输出异常技术求助

解决你的海龟绘图命令数组异常问题

嘿,我看了你贴的代码片段,发现几个很可能导致数组输出不符合预期的问题,咱们一个个说清楚:

  • 数组越界的致命问题
    你写的 int valCommand = arrCommand[i--]; 这里初始i是0,i--直接变成-1,访问arrCommand[-1]属于数组越界访问,这是C语言里的未定义行为——要么读出来一堆垃圾值,要么直接让程序崩掉,绝对不能这么写。
    另外int valFloor = floor[floorSize][floorSize]; 你的floor是50x50的数组,下标只能到49,如果floorSize是50的话,这里也越界了,同样会出问题。

  • 命令存储的逻辑漏洞
    你说要循环用scanf存命令到数组,但没看到完整的循环逻辑。正确的存储方式应该是这样的(比如用-1作为输入结束的标志):

    int i = 0;
    // 循环读命令,直到输入错误、读到终止符,或者数组存满
    while (scanf("%d", &arrCommand[i]) == 1 && arrCommand[i] != -1 && i < 500) {
        i++;
    }
    // 此时i就是你存的有效命令总数
    

    一定要加i < 500的判断,不然数组存满了还继续写,会直接破坏其他内存的数据。

  • 未初始化的数组坑
    你定义的floor和arrCommand都是局部数组,默认是未初始化的,里面全是随机的垃圾值。如果你的海龟绘图需要初始地板是空白(比如全0),得手动初始化:

    // 把floor数组全部初始化为0
    int floor[50][50] = {0};
    // 可选:把命令数组也初始化为0,避免未使用的位置是垃圾值
    int arrCommand[500] = {0};
    
  • 遍历处理命令的正确姿势
    遍历数组处理命令的时候,要用你之前存的有效命令数(比如上面的i),别硬写循环次数:

    for (int j = 0; j < i; j++) {
        // 根据arrCommand[j]执行对应的海龟操作
        switch(arrCommand[j]) {
            case 1: // 假设1是前进命令
                // 写前进的逻辑,比如修改海龟位置、标记地板
                break;
            case 2: // 假设2是左转命令
                // 调整海龟的方向
                break;
            // 其他命令的处理分支
        }
    }
    

先把这些问题修掉,再测试数组的输出,应该就能解决你现在的问题啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:27:10