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

C语言井字棋程序bug:第2、3列无法判定胜负

井字棋列胜负判定问题修复方案

你的井字棋程序中,第2、3列的三连无法被识别的问题,根源出在checkWinner函数的代码结构和逻辑错误上,具体修复如下:

问题分析

  1. 循环嵌套错误:列胜负判断的for循环内部错误包含了对角线判断逻辑,且缺少闭合大括号,导致循环仅执行i=0的情况(对应第1列),i=1和i=2的迭代完全没触发,自然检测不到第2、3列的三连。
  2. 对角线判断笔误:主对角线判断中误用了board[0][i],正确的应该是board[0][0],这个错误会导致部分场景下对角线胜负无法被识别。

修正后的checkWinner函数

char checkWinner(){
    int i;
    // 检查行胜负
    for(i=0;i<3;i++){
        if (board[i][0]==board[i][1]&&board[i][0]==board[i][2]){
            return board[i][0];
        }
    }
    // 检查列胜负
    for(i=0;i<3;i++){
        if (board[0][i]==board[1][i]&&board[0][i]==board[2][i]){
            return board[0][i];
        }
    }
    // 检查主对角线(左上到右下)
    if(board[0][0]==board[1][1]&&board[0][0]==board[2][2]){
        return board[0][0];
    }
    // 检查副对角线(右上到左下)
    if(board[0][2]==board[1][1]&&board[0][2]==board[2][0]){
        return board[0][2];
    }
    return ' ';  // 无胜者
}

额外优化建议(可选)

  • botMove函数中每次调用都执行srand(time(0))会导致随机数重复,建议把srand(time(0))放到main函数开头仅执行一次。
  • humanPlay函数最后调用的是printWinner而非printWinnerHuman,双人模式下胜利提示会出错,需替换为printWinnerHuman(winner)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 23:17:30