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

C语言Chomp游戏CheckMove函数分支异常问题求助

问题原因及解决方案

核心问题

你遇到的问题根源有两个:

  1. CheckMove函数直接修改了传入的move数组:函数里执行move[0] -= 1和move[1] -= 1时,直接把输入的1-based坐标改成了0-based,破坏了原数组的值。主循环里多次调用CheckMove(move),第一次调用后move已经变成0-based,后续调用时move[0]和move[1]不再满足>=1的条件,直接进入else分支返回3。
  2. 主循环重复调用CheckMove:每次判断分支都重新调用函数,而不是复用第一次的返回结果,进一步放大了第一个问题的影响。

修复步骤

1. 修改CheckMove函数,避免破坏原move数组

创建临时变量存储转换后的索引,不直接修改传入的move参数:

int CheckMove(int move[2])
{
    int check = 99;
    // 验证输入的1-based坐标合法性
    if ((move[0] >= 1 && move[0] < 5) && (move[1] >= 1 && move[1] <= 10))
    {
        // 用临时变量转换为0-based索引,保留原move数组的值
        int row = move[0] - 1;
        int col = move[1] - 1;
        // 检查棋盘状态
        if (board[row][col] == 'Z')
        {
            check = 1;
        }
        else if(board[row][col] == 'X')
        {
            check = 2;
        }
        else 
        {
            check = 0;
        }
    }
    else 
    { 
        check = 3; 
    }
    return check;    
}

2. 主循环中复用CheckMove的返回结果

只调用一次CheckMove并保存结果,后续分支判断都使用这个变量,避免重复调用导致的参数异常:

while(1)
{
    PrintBoard();
    player = (player == 2)? 1 : 2;

    while(1)
    {
        GetMove(player, move);
        // 仅调用一次CheckMove,保存结果用于后续判断
        int moveResult = CheckMove(move);

        if (moveResult == 0)  
        { 
            // 如果UpdateBoard需要0-based坐标,这里要转换后传入
            int updateRow = move[0]-1;
            int updateCol = move[1]-1;
            UpdateBoard(updateRow, updateCol); 
            break;
        }
        else if (moveResult == 1) 
        {
            printf("\nAlready taken. Please try again! (row col): ");
            continue;
        }
        else if (moveResult == 2) 
        {
            printf("\nYou lost!\n");
            return 0;
        }
        else if (moveResult == 3) 
        {
            printf("\nIllegal move. Try again! (row col): ");
            continue;
        }
    }
}

额外提示

如果UpdateBoard原本依赖CheckMove修改后的move数组,现在需要手动转换坐标后传入,确保逻辑一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:50:18