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
相关产品推荐
相关产品推荐

