【发布时间】:2022-08-17 13:27:26
【问题描述】:
我在 C 中有一个二维数组,我试图使正值或1 值下降直到它到达数组的底部,但是由于某种原因,一旦我运行代码,1 就会向左移动并且然后下来。它的工作方式是将当前值变为0,底部值变为1,重复此操作并产生直线下降的效果,此代码在fallDown()功能。
代码:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#ifdef __unix__
# include <unistd.h>
#elif defined _WIN32
# include <windows.h>
#define sleep(x) Sleep(1000 * (x))
#endif
int sizeX = 20;
int sizeY = 20;
int grid[20][20] = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
int fallDown(int grid[sizeX][sizeY], int x, int y){
grid[x][y]=0;
grid[x][y+1]=1;
}
int main(void){
int neighbour_count[sizeX][sizeY];
int x,y,iterations;
for(iterations=0;iterations<500;iterations++){
system(\"cls\"); //Clear screen
for(x=0;x<sizeX;x++){
printf(\"\\n\");
for(y=0;y<sizeY;y++){
if(grid[x][y]==1){
printf(\"@\");
}
else{
printf(\" \");
}
}
}
for(y=0;y<sizeY;y++){
for(x=0;x<sizeX;x++){
if(grid[x][y] == 1){
fallDown(grid, x, y);
}
}
}
printf(\"\\n\");
sleep(1);
}
}
-
fallDown没有任何边界检查。使用您的循环,可能会使用y == sizeY - 1调用它。那么y + 1就会越界。 -
@Some程序员老兄仍然,我只是想了解为什么会发生这种向左走的奇怪行为以及如何解决它。界限问题是我打算稍后解决的问题。