C语言井字棋程序bug:第2、3列无法判定胜负
井字棋列胜负判定问题修复方案
你的井字棋程序中,第2、3列的三连无法被识别的问题,根源出在checkWinner函数的代码结构和逻辑错误上,具体修复如下:
问题分析
- 循环嵌套错误:列胜负判断的
for循环内部错误包含了对角线判断逻辑,且缺少闭合大括号,导致循环仅执行i=0的情况(对应第1列),i=1和i=2的迭代完全没触发,自然检测不到第2、3列的三连。 - 对角线判断笔误:主对角线判断中误用了
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
相关产品推荐
相关产品推荐

