C++ 康威博弈错误与二维数组操作

C++ 康威博弈错误与二维数组操作,c++,C++,所以我正在研究,到目前为止我已经提出了这个,我不确定我是否在正确的轨道上。基本上我有一个函数输出随机值来测试我的代码。但似乎什么也没发生。我怀疑我的问题在于以下代码 int sum = 0; for (int k = (i - 1); k <= (i + 1); k++) { for (int l = (j - 1); l <= (j + 1); l++) { sum += currentGen[k][l]; }

所以我正在研究,到目前为止我已经提出了这个,我不确定我是否在正确的轨道上。基本上我有一个函数输出随机值来测试我的代码。但似乎什么也没发生。我怀疑我的问题在于以下代码

int sum = 0;

    for (int k = (i - 1); k <= (i + 1); k++) {
        for (int l = (j - 1); l <= (j + 1); l++) {
            sum += currentGen[k][l];
        }
    }

    return sum;

我根据您发布的代码提供此答案。你真的应该考虑把那个代码添加到你原来的问题中,这样在StAccess上找到的人会有完整的上下文。

如果单元格满足
RANDOM
阈值,则您的
randomcell
函数仅将单元格设置为1。否则不会将其清除为0。一旦你修好了,一切都会好起来的。即

void RandomCells(int currentGen[][CELLY]) {
    for (int i = 0; i < CELLX; i++) {
        for (int j = 0; j < CELLY; j++) {
            if (rand() % 100 + 1 < RANDOM) {
                currentGen[i][j] = 1;
            } else
            {
                currentGen[i][j] = 0;
            }
        }
    }
}
显然,这些细胞中的大多数是非零的,因此康威的生命算法会在下一代将它们映射为0,因为“拥挤”

用这种“随机”值填充currentGen的原因是它作为一个自动变量分配给了
main
。自动变量不会初始化为任何特定值。您需要自己初始化它们。您可以通过修改您的算法(正如我上面所做的),或者通过添加显式代码来初始化结构来实现这一点

<>这与文件范围变量不同,如果C和C++没有初始化器或默认构造函数,则它们定义为程序启动时初始化为零。(学究们会指出,即使这样也有警告。)


一旦您进行了必要的修复,要真正了解康威的生活,您需要将
CELLX
CELLY
设置为更大的值…

此循环的输入是什么?也就是说,您正在扫描以创建的上一代是否为currentGen?大概有一对环围绕着这两个。。。你能展示整个函数吗?我创建了一个函数
RandomCells
来添加1。在这里,你还应该检查i-1、i+1、j-1、j+1是否在你的2D数组的范围内。你没有输出和值。在得到Conway函数的处理后,您将输出数组值。我建议您使用调试器来检查总和值。
void RandomCells(int currentGen[][CELLY]) {
    for (int i = 0; i < CELLX; i++) {
        for (int j = 0; j < CELLY; j++) {
            if (rand() % 100 + 1 < RANDOM) {
                currentGen[i][j] = 1;
            } else
            {
                currentGen[i][j] = 0;
            }
        }
    }
}
0 0 4196155 1 
1813657216 1 4197653 0 
-870503576 1 4197584 1