Connect 4落子函数仅两行生效 第三行落子覆盖第二行问题求解
代码逻辑问题
- 循环被强制中断:for循环末尾执行
i = 0,导致循环最多执行1次后就会因i自减为-1退出,永远只能遍历列的最底部1-2行,无法处理更高行的落子逻辑。 - 落子判断逻辑混乱:原代码没有遵循四子棋「从列底向上找第一个空位落子」的规则,两个if判断没有互斥和跳出逻辑,找到已有棋子时直接在上一行赋值,会覆盖上一行的已有内容。
- 存在越界风险:当遍历到第0行时如果该行已有棋子,
i-1会得到-1,触发数组越界访问。
修复方案
正确逻辑为:从目标列的最底部开始向上遍历,找到第一个空格后放置棋子,直接跳出循环即可。
const int N = 200; const string usr1 = "o", usr2 = "x"; void updateBoard(string a[N][N], int c, int n, string xo) { int col = c - 1; // 从列的最底部行开始向上遍历 for (int i = n - 1; i >= 0; i--) { if (a[i][col] == " ") { a[i][col] = xo; // 落子完成直接退出循环 break; } } // 可扩展:如果遍历完所有行都没找到空格,说明当前列已满,可增加抛出错误/提示逻辑 }
内容的提问来源于stack exchange,提问作者lukakone Konečnik
相关产品推荐
相关产品推荐

