对于c ++中具有二维数组的循环

时间:2012-11-27 17:07:33

标签: c++ for-loop nested multidimensional-array

int count = 0;
for(int x = 1; x < 79; x++)
{
    for(int y = 1; y < 21; y++)
    {
        char surroundingCells[] = {arr[x-1][y-1], arr[x][y-1], arr[x-1][y], arr[x+1][y+1], arr[x+1][y-1], arr[x-1][y+1], arr[x][y+1], arr[x+1][y]};
        for(int z = 0; z < 8; z++)
        {
            if((surroundingCells[z] == 'x' || surroundingCells[z] == 'd') && arr[x][y] == 'x')
                count++;
            else if((surroundingCells[z] == ' ' || surroundingCells[z] == 'l') && arr[x][y] == ' ')
                count++;
        }
        if(arr[x][y] == 'x' && (count != 2 || count != 3))
            arr[x][y] = 'd';
        else if(arr[x][y] == ' ' && count == 3)
            arr[x][y] = 'l';
        count = 0;
    }
}

当我在运行此代码后打印数组时,所有存在x的地方都有一个“d”但不应该出现某些情况允许保留“x”。有人能看到我的逻辑错误吗?

1 个答案:

答案 0 :(得分:4)

你的代码正在制作它,所以'x'的每个实例都被改为'd'。在线

if(arr[x][y] == 'x' && (count != 2 || count != 3))

arr[x][y]为'x'时,条件始终计算为true。如果count是2,那么它不是3,如果它是3,那么它不是2.所以当arr[x][y]是'x'时,程序总是进入该块。如果您希望在count为2或3时不将其更改为“d”,则将该行更改为

if(arr[x][y] == 'x' && (count != 2 && count != 3))