Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查邻居在C语言游戏中的状态_C_Arrays_Conways Game Of Life - Fatal编程技术网

检查邻居在C语言游戏中的状态

检查邻居在C语言游戏中的状态,c,arrays,conways-game-of-life,C,Arrays,Conways Game Of Life,我有一个任务是用C重新创建康威的生命游戏。在下面的代码中,我试图检查2D数组中给定坐标的邻居的状态是死还是活: int checkNeighbor(int i, int j, cell field[i][j]) { int sum=0; if(canGoUp(i) && canGoLeft(j) && (field[i-1][j-1].current == ALIVE)) { sum++; } if(canGoU

我有一个任务是用C重新创建康威的生命游戏。在下面的代码中,我试图检查2D数组中给定坐标的邻居的状态是死还是活:

int checkNeighbor(int i, int j, cell field[i][j]) {
    int sum=0;


    if(canGoUp(i) && canGoLeft(j) && (field[i-1][j-1].current == ALIVE)) {
        sum++;
    }
    if(canGoUp(i) && (field[i-1][j].current == ALIVE)) {
        sum++;
    }
    if(canGoUp(i) && canGoRight(j) && (field[i-1][j+1].current == ALIVE)) {
        sum++;
    }
    if(canGoRight(j) && (field[i][j+1].current == ALIVE)) {
        sum++;
    }
    if(canGoDown(i) && canGoRight(j) && (field[i+1][j+1].current == ALIVE)) {
        sum++;
    }
    if(canGoDown(i) && (field[i+1][j].current == ALIVE)) {
        sum++;
    }
    if(canGoDown(i) && canGoLeft(j) && (field[i+1][j-1].current == ALIVE)) {
        sum++;
    }
    if(canGoLeft(j) && (field[i][j-1].current == ALIVE)) {
        sum++;
    }

    return sum;
}

名为“canGoUP”或“canGoDown”等的函数通过检查坐标是否靠近2D阵列的边缘来防止分段故障。现在,由于某些原因,代码的工作并不完美。我得到了一些邻居的迹象,但它几乎从来没有告诉我正确的数量。有没有更好的办法解决这个问题?还是我只是在代码中遗漏了什么

此函数错误地认为
字段
矩阵有多大。它认为
字段
i
行和
j
列。然而,这是不正确的。它可能有更多的行和列

例如,如果使用
i==0
j==0
调用此函数,则该调用的数组声明为
单元格字段[0][0]
,即无效的空数组

您需要将实际尺寸作为附加参数传入,并将这些参数用于数组大小

int checkNeighbor(int i, int j, int rows, int cols, cell field[rows][cols]);

单元格字段[i][j]
需要是
单元格字段[rows][cols]
。我应该提到checkNeighbor函数用于for循环。这样我就可以遍历所有坐标并检查每个坐标的邻居。这就是为什么行和列用i和j表示的原因。是的,但是您需要告诉编译器
字段
数组有多大。当
i
j
为0时,您告诉编译器数组是0x0条目。但事实上,数组的大小是固定的。如果不清楚,我是说您需要将函数签名
int checkNeighbor(int I,int j,cell field[I][j])
更改为
int checkNeighbor(int I,int j,cell field[rows][cols])
。函数体很好。基于
canGo…
函数,我认为
cols
要么是全局变量,要么是定义的常量。