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

C语言生命游戏代码邻居计数错误排查求助

解决生命游戏邻居计数错误的问题

我仔细看了你的代码和问题描述,发现导致邻居计数错误(原本应为2的位置被显示为3)的核心原因是一个运算符使用错误,另外还有一些可以优化的地方,下面详细说明:

核心错误:赋值运算符代替比较运算符

在你的邻居计数逻辑之后的细胞状态更新部分,有一行代码写错了:

else if (neighbors = 3){

这里你使用了赋值运算符=,而不是比较运算符==。这会导致:

  • 当邻居数为2且当前细胞是0时(比如你提到的那些错误位置),前面的条件都不满足,程序会执行这个分支,把neighbors的值强制设置为3,然后你紧接着打印neighbors,就会输出错误的3,而不是原本正确的2。

修复方法很简单,把这一行改成:

else if (neighbors == 3){

其他可以优化的细节

  1. 冗余的条件判断
    在填充矩阵时,你的条件判断temp == '1' && temp != ';'是冗余的,因为temp如果是'1',肯定不可能是';',可以简化为:

    if (temp == '1'){
        matrix[cols][rows] = 1;
        rows++;
    } else if (temp == '0'){
        matrix[cols][rows] = 0;
        rows++;
    }
    

    这样代码更简洁,逻辑也更清晰。

  2. 矩阵更新的逻辑验证
    你的代码中,每一轮迭代都是先计算所有细胞的新状态到updated矩阵,再统一更新到matrix,这个逻辑是正确的(符合生命游戏所有细胞同时更新的规则),不需要修改。

修复后的预期效果

修复运算符错误之后,你的邻居计数矩阵应该会和预期一致:

0 0 1 1 1 0
1 1 3 1 2 0
1 1 5 3 3 0
1 2 3 2 2 0
0 1 2 2 1 0
0 0 0 0 0 0

你可以先测试这个核心修复,应该就能解决你提到的5处计数错误的问题。

内容的提问来源于stack exchange,提问作者N. Holmes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:49:14