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

