为何for循环无法终止?附checkSE函数代码片段
你的for循环无法终止的原因分析
嘿,我瞅了你的代码片段,立马就找到问题所在啦——你嵌套的那个内层for循环漏掉了迭代语句,这直接导致它无限循环停不下来!
先看你这段有问题的代码:
for (--i, --j; board[i][j].type == opponent;...)
C语言里for循环的结构是 for(初始化; 循环条件; 迭代操作),你这里第三个部分(分号后面的迭代操作)只写了...,相当于啥都没做。这意味着每次循环跑完,i和j的值都不会变,只要board[i][j].type == opponent这个条件一直成立,循环就会一直转下去,根本停不下来。
修复方案
你需要在迭代部分加上让i和j递减的操作(毕竟你是往西南方向回溯检查棋子对吧?),同时最好加上边界判断避免数组越界,修改后的循环应该是这样:
// 往西南方向回溯,同时确保索引不越界 for (--i, --j; i >= 0 && j >= 0 && board[i][j].type == opponent; --i, --j) { // 这里可以添加你的业务逻辑,比如标记需要翻转的棋子等 }
这样每次循环都会让i和j各减1,逐步往回检查,要么遇到不是对手棋子的情况,要么触达数组边界,循环都会正常终止。
内容的提问来源于stack exchange,提问作者Lucie
相关产品推荐
相关产品推荐

