我已经完成了在C中重新创建Conway的生命游戏的任务。在下面的代码中,我试图检查2D数组中给定坐标的邻居是否具有DEAD或ALIVE状态:
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数组的边缘来防止段错误。现在,由于某种原因,代码不能正常工作。我得到了邻居的一些迹象,但它几乎从来没有告诉我适量。有没有更好的方法来解决这个问题?或者我只是错过了代码中的某些内容?
答案 0 :(得分:1)
这个函数错误地认为 inp = open("original.dat", "r")
out = open("new.log", "w")
for line in inp:
if float(line.split()[5]) < 5.0:
out.write(line)
矩阵有多大。它认为field
有field
行和i
列。然而,这是不正确的。它可能有更多的行和列。
例如,如果使用j
和i==0
调用此函数,则该调用的数组声明为j==0
,即空数组无效。
您需要将实际尺寸作为附加参数传递,并将其用于数组大小。
cell field[0][0]