C语言生命游戏代码邻居计数错误排查求助
解决生命游戏邻居计数错误的问题
我仔细看了你的代码和问题描述,发现导致邻居计数错误(原本应为2的位置被显示为3)的核心原因是一个运算符使用错误,另外还有一些可以优化的地方,下面详细说明:
核心错误:赋值运算符代替比较运算符
在你的邻居计数逻辑之后的细胞状态更新部分,有一行代码写错了:
else if (neighbors = 3){
这里你使用了赋值运算符=,而不是比较运算符==。这会导致:
- 当邻居数为2且当前细胞是0时(比如你提到的那些错误位置),前面的条件都不满足,程序会执行这个分支,把
neighbors的值强制设置为3,然后你紧接着打印neighbors,就会输出错误的3,而不是原本正确的2。
修复方法很简单,把这一行改成:
else if (neighbors == 3){
其他可以优化的细节
冗余的条件判断
在填充矩阵时,你的条件判断temp == '1' && temp != ';'是冗余的,因为temp如果是'1',肯定不可能是';',可以简化为:if (temp == '1'){ matrix[cols][rows] = 1; rows++; } else if (temp == '0'){ matrix[cols][rows] = 0; rows++; }这样代码更简洁,逻辑也更清晰。
矩阵更新的逻辑验证
你的代码中,每一轮迭代都是先计算所有细胞的新状态到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
相关产品推荐
相关产品推荐

