2014-04-29 2 views
0

Я кодирую игру, в которой используется «сетка», которую я создал с использованием 2-мерного массива структур, которые содержат значение char и логическое значение. В файле .h-файла моей программы я объявляю структуру и создаю сетку.Странные символы, появляющиеся в 2D Char Array

struct Tile 
{ 
    char letter; 
    bool active; 
}; 

Tile grid [6][5]; 

В моем .cpp-файле я инициализирую сетку так, чтобы все значения были пустыми.

for (int i = 0; i < 7; ++i) 
    { 
     for (int j = 0; j < 6; ++j) 
     { 
      grid[i][j].active == false; 
      //grid[i][j].letter = '.'; 
      //it always crashes when i try doing the above line 
     } 

    } 

Функция, которая печатает сетку, printGrid, ниже

for (int i = 0; i < 7; ++i) 
    { 
     for (int j = 0; j < 6; ++j) 
     { 
      cout << i; 
      //the above statement is for debugging purposes so that I can see 
      //which column easier 
      std::cout << grid[i][j].letter; 
     } 
     std::cout << std::endl; 
    } 
    cout << "1 2 3 4 5 6" << endl; 

Теперь, первоначальная цель была иметь значение быть .letter по умолчанию ''. Но по какой-то причине, когда я пытался это сделать, были катастрофические результаты; экран заполняется персонажами, двигающимися так быстро, что я не могу полностью понять, что они собой представляют (я вспоминаю несколько сердец и смайликов), а также неприятный, быстрый звуковой сигнал. Поэтому я решил оставить эту прокомментированную строку.

Когда я запускаю программу без этой строки, по какой-то причине «сетка» всегда отображает символы в определенных местах, без каких-либо входных данных от пользователя, или без явного объявления каких-либо значений этому месту. Например, пятно 1-го столбца слева и нижнего ряда всегда имеет в нем символ (сетка [6] [5] .letter). Он меняется каждый раз, когда я запускаю программу, и я видел, что она варьируется от сердца, до буквы А, до испанского «n» (того, у кого есть над ним).

Я подумал про себя: «Привет, потому что сетка [6] [5] - это пятна, которые всегда багги, я просто объявляю, что значения этого индивидуального пятна будут пустыми ('')!». Это не сработало.

Я понятия не имею, почему это одно место дает мне проблемы. Были и другие области, которые имели бы ненормальный характер, но я смог нейтрализовать их, установив их. Если кто-нибудь знает, как это исправить, просьба

EDIT: Другие аномальные символы, которые появляются в сетке [6] [0], сетка [6] [1], сетка [6] [5], и сетка [6] [4], все это приведет к сбою моей программы на более поздних этапах, если я установил их в пустые (''); тем не менее, гашение сетки [6] [5] является тем, что заставляет его сбой при получении. Я попытался использовать отладчик, но он не смог сказать мне ничего полезного.

ответ

2

вы работаете над концом ваших массивов

Tile grid [6][5]; должен быть Tile grid [7][6];

или вам нужно цикл только i < 6 и j < 5.

+0

О, боже, я никогда не думал об этом. Это сработало отлично, я никогда не думал, что предел был проблемой, так как 0 учитывалось для 1-го значения. Спасибо. – user3585982

Смежные вопросы