2013-04-01 3 views
0

У меня есть массив 2d, заполненный глобальными переменными.C++ 2d array не отображается

#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; 
} 

Вопрос заключается в том: Почему я не могу видеть информацию в 2d массив больше в часах или когда я hoofer над? Надеюсь, вы можете мне помочь.

+0

Покажите нам код, который выводит на терминал –

+0

ARGH '# define' и C массивы Вы уверены, что код в C++? –

+0

даже с константой int GRID_HEIGHT = 10; он больше не работает – Lutske

ответ

0

Вопрос в том, почему я больше не мог видеть свой 2-й массив в часах. Это снова работает. Не знаю, что случилось. Но изображение ниже показывает правильное использование часов. Я использую это для проверки информации внутри массива 2d. Но на некоторое время он не отображал информацию только о сетке {...} вместо сетки 0x00 char (* grid) [25], а затем о строках и столбцах.

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

0

Похоже, что ваш код печати выходит за границы массива. Как и при заполнении массива, вы должны использовать

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

Это может быть причиной вашей неисправной печати.

+0

Это не проблема, речь идет о том, почему она больше не отображает информацию о массиве. Но я изменил это на своем коде. – Lutske

1

Я не думаю, что проблема связана с вашими кодами, опубликованными, потому что я только что протестировал их на своем визуальном stuido 2008, они хорошо работают с вашей функцией printGrid, за исключением varable ir, и я определил ее с большой радостью, а функция printGrid double определенные x и y, вы определили его в функции head, но в цикле, используя for (int x ...), что означает отсутствие смысла.

результат, полученный только от printGird, выглядит следующим образом:

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

3, 4 - значение x, y, которое прошло в printGrid при его использовании.

+0

Ваше право. Я использую метод x и y, поэтому я могу видеть, что такое текущий pos, но я использую одно и то же имя для цикла, и это неверно. Забавно, что он все время работал. Ir определяется глобальным. Функция SetGrid(), где я не вставлял код этого метода здесь. Показывает более логическую сетку. – Lutske

+0

повторное определение переменной (которая была определена вне цикла) в цикле всегда будет принята, поскольку переопределенная переменная будет использоваться только в цикле. –

+1

Я думаю, вам нужно отлаживать свои функции шаг за шагом, чтобы проверить, где происходит сложность, это оригинальный способ узнать об ошибках ваших кодов. И очень легко использовать визуальные для отладки. –