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

CS课程作业:井字棋程序二维数组填满检查函数开发求助

优化井字棋棋盘填满检查函数的实现

嘿,作为第一次用函数开发程序的CS学习者,你能想到用bool类型返回结果,还引入了<stdbool.h>,这已经很棒了!不过你现在写的逐个判断每个格子的代码有点繁琐,而且扩展性很差——如果以后想把井字棋改成更大的尺寸(比如5x5),你就得手动加一堆else if,这显然不是高效的写法。我们可以用循环遍历来简化这个逻辑,让代码更灵活、更易维护。

优化后的函数实现

首先确保你已经定义了棋盘的尺寸常量(比如#define SIZE 3),然后可以这样写函数:

#include <stdbool.h>

#define SIZE 3  // 井字棋的棋盘尺寸,可按需修改

bool check_table_full(char board[SIZE][SIZE]) {
    // 遍历每一行
    for (int i = 0; i < SIZE; i++) {
        // 遍历当前行的每一列
        for (int j = 0; j < SIZE; j++) {
            // 如果找到任何一个未填充的格子('_'),直接返回false
            if (board[i][j] == '_') {
                return false;
            }
        }
    }
    // 遍历完所有格子都没找到'_',说明棋盘已填满,返回true
    return true;
}

代码逻辑解释

  • 外层的for循环负责遍历棋盘的每一行(索引从0到SIZE-1)。
  • 内层的for循环负责遍历当前行的每一个格子。
  • 只要发现任何一个格子是初始的'_',就立刻返回false——因为只要有一个空位,棋盘就没填满。
  • 如果两层循环都顺利执行完毕,说明所有格子都被'x'或'o'填充了,这时返回true。

额外小提示

  • 这个写法的好处是完全适配SIZE的变化,哪怕你把SIZE改成5,代码不需要做任何其他修改就能正常工作。
  • 可以在调用这个函数前,确保棋盘里的元素只有'_'、'x'、'o',避免出现其他无效字符影响判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:10:31