C ++ 2d数组不显示

时间:2013-04-01 20:38:21

标签: c++ arrays types multidimensional-array grid

我有一个填充了全局变量的二维数组。

#define GRID_WIDTH 19
#define GRID_HEIGHT 10
char grid[GRID_WIDTH][GRID_HEIGHT];

稍后在代码中我使用这个2d数组

void Grid::ResetGrid()
{
    // Empty the console screen
    system("cls");

    // Fills the grid with '#' walls
    for (int i=0; i<GRID_WIDTH; i++)
    {
        for(int j = 0; j <GRID_HEIGHT; j++)
            grid[i][j] = '#';
    }
    ir = 2;
}

在我运行程序时,我使用手表和断点。一开始,网格上的手表说:

Name:  grid
Value: [0] "###################"
           [0] '#'
           [1] '#'
           [2] '#' 
//and so on, i could expand it and look at every part of the array


type: char

但现在已经破了,它只显示了这个:

Name:  grid
Value: {...}
type: Grid

奇怪的是我没有更改数组代码,只编写了比较数组内部代码行的代码行。

将其打印到控制台的代码:

void Grid::PrintGrid(int currentX, int currentY )
{
    // Empty the console screen
    system("cls");

    // Displays the finished maze to the screen.
    for (int y=0; y <  GRID_HEIGHT; y++)
    {
        for (int x=0; x <  GRID_WIDTH; x++)
        {
            cout << grid[x][y];
        }
        cout << endl;
    }
    // Just for testing, which direction and on what position the solver is
    cout << ir << "    " << currentX << "," << currentY;
}

问题是: 为什么我不能在手表中看到二维阵列中的信息或者当我翻过来时? 我希望你能帮助我。

3 个答案:

答案 0 :(得分:1)

我不认为你的代码发布时会出现问题,因为我刚刚在我的visual stuido 2008中对它们进行了测试,它们的printGrid函数运行良好,除了varable ir我全局定义它,你的printGrid函数双重定义x和y,你在函数头中定义它,但在循环中,使用for(int x ...),这意味着没有意义..

结果来自printGird就像这样:

###################
###################
###################
###################
###################
###################
###################
###################
###################
###################
2    3,4请按任意键继续. . .

3,4是使用时在printGrid中传递的x,y的值。

答案 1 :(得分:0)

看起来您的打印代码超出了数组的范围。就像你填充数组时一样,你应该使用

for (int y=0; y < GRID_HEIGHT; ++y)
{
    for (int x=0; x < GRID_WIDTH; ++x)
    {

这可能是您打印错误的原因。

答案 2 :(得分:0)

问题是为什么我再也看不到我的2D阵列了。 它再次运作。不知道出了什么问题。但下图显示了手表的正确使用方法。我用它来检查二维数组中的信息。但它没有显示一段时间的信息只是网格{...}而不是网格0x00字符(*网格)[25],然后是关于行和列的信息。

this watch on the grid didn't work for a while