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

康威生命游戏邻居计数功能异常,C语言代码问题排查求助

代码问题排查与修复方案

你提交的代码共有4处可导致运行错误的问题,具体如下:

1. neighbors函数越界判断逻辑错误

原越界判断存在两个问题:

  • 逻辑运算符使用错误:用了&&(且),只有当行和列同时越界时才会跳过,实际只要行/列任意一个越界就需要跳过访问
  • 数组下标范围错误:12长度的数组合法下标为0~11,判断>12阈值不对,应该是>=12

修复后的neighbors函数越界判断:

// 原错误代码
// if ((l+i < 0 || l+i > 12) && (c+j < 0 || c+j > 12))
// 替换为以下代码
if (l+i < 0 || l+i >= 12 || c+j <0 || c+j >=12) {
    continue;
}

2. 死细胞判断使用赋值运算符而非相等判断

logic函数中判断死细胞的代码写为if (field[i][j] = '-'),单等号是赋值操作,会把field[i][j]强制设为'-',且判断条件永远为真,覆盖之前活细胞的判断结果。

修复方法:

把单等号改为双等号:

if (field[i][j] == '-')

3. 状态更新时机错误

生命游戏需要基于上一代完整的状态计算所有新一代细胞状态,全部计算完成后再统一更新全局field。你当前的代码把field[i][j] = temp[i][j];写在了内层循环中,每计算一个细胞就立刻更新field,导致后续细胞统计邻居时用的是已经修改过的新一代状态,计算结果完全错误。

修复方法:

删除内层循环中的field[i][j] = temp[i][j];,在所有细胞的temp状态计算完成后,单独加一层循环把temp同步到field:

// 原两层循环结束后加以下代码
for (int i = 0; i < 12; i++) {
    for (int j = 0; j < 12; j++) {
        field[i][j] = temp[i][j];
    }
}

4. 活细胞存活规则不符合标准康威生命游戏设定

标准规则中活细胞邻居数小于2就会因孤独死亡,你当前的判断条件是neighbors(i, j) < 1,只有邻居数为0才会死亡,不符合规则。

修复方法:

把判断条件改为:

if (neighbors(i, j) < 2 || neighbors(i, j) > 3)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:45:04