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

为何字符'<'碰到边界'*'未转为'>'反而消失?

问题定位与修复

核心问题

处理左移车辆(<)的逻辑中缺少break语句,导致转向后的符号被后续分支覆盖为.,最终表现为车辆消失。

问题细节分析

  • 右移车辆(>)的逻辑里,成功移动后执行了break,跳出当前行的循环,不会进入后续的else分支修改当前位置。
  • 左移车辆(<)的逻辑中,无论是移动到空位还是碰到边界转向,都没有break,循环会继续执行到else分支,将map[i][j]强制设为.,直接清除了刚转向的>。

修复后的代码

void moveCar(int rows, int cols, char **map) {
    int i, j;
    for (i = 1; i < rows; i+=2) {
        for (j = 0; j < cols; j++) {
            if (map[i][j] == '>') {
                if (j < cols - 1) {
                    if (map[i][j + 1] == '.') {
                        map[i][j + 1] = '>';
                        map[i][j] = '.';
                        break;
                    }
                    else if (map[i][j + 1] == '*') {
                        map[i][j] = '<';
                        break; // 补充break,避免后续循环干扰
                    }
                }
            }
            else if (map[i][j] == '<') {
                if (j > 0) {
                    if (map[i][j - 1] == '.') {
                        map[i][j - 1] = '<';
                        map[i][j] = '.'; 
                        break; // 添加break,跳出当前行循环
                    }
                    else if (map[i][j - 1] == '*') { 
                        map[i][j] = '>';
                        break; // 添加break,避免进入else分支
                    }
                }
            }
            // 移除不必要的else分支:原逻辑会强制覆盖非车辆位置为.,可能破坏地图原有静态元素
        }
    }
}

额外优化说明

原代码中的else分支会将所有非车辆的位置强制设为.,这可能破坏地图上的其他静态元素(比如除*和车辆外的其他标记),建议直接移除该分支,只聚焦处理车辆的移动逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 04:22:40