2D массив не будет печататься правильно - PullRequest
0 голосов
/ 25 февраля 2019

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

#include <iostream>

using namespace std;

int main(){

char myGrid[7][10]{{'.', '.', '.', '.', '.', '.', '.', '.', '.', '.'},
                   {'.', '.', 'P', '.', '.', '.', '.', 'T', '.', '.'},
                   {'.', '.', '.', '.', '.', '.', '.', '.', '.', '.'},
                   {'.', '.', '.', '.', 'T', '.', '.', '.', '.', '.'},
                   {'.', '.', '.', '.', '.', '.', 'T', '.', '.', '.'},
                   {'.', '.', 'T', '.', '.', '.', '.', '.', '.', '.'},
                   {'.', '.', '.', '.', 'X', '.', '.', '.', '.', '.'}};

for(int i = 0; i < 7; i++){
    for(int j = 0; j < 10; j++){
        cout << myGrid[i][j] << " ";
        if(j = 9){
            cout << endl;
        }
    }
}
}

Это вывод, который я получаю из своей консоли:

.

.

.

.

.

.

.

1 Ответ

0 голосов
/ 25 февраля 2019

Проблема заключается в строке: if(j = 9).Вам нужно двойное равенство для сравнения.Здесь вы присваиваете j, что позволяет пропустить оставшуюся часть строки.

Незатребованный совет:

  1. Избегайте жесткого кодирования ваших констант (например, 7,10, 9).Используйте sizeof для массивов или, по крайней мере, постоянное значение, например const auto rows = 7;.
  2. Если вы получаете намного более сложные или большие карты, вам, вероятно, следует перейти от необработанных массивов к std::vector или, возможно, std::array.Если вы сделаете это, вы можете решить # 1, используя myGrid.size() и myGrid[row].size().
  3. Используйте '\n' вместо std::endl.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...