2D阵列无法正确打印

时间:2019-02-25 13:16:13

标签: c++ multidimensional-array

我正在尝试编写地下城抓取游戏,并且编译器无法正确打印我的网格,由于某种原因,它仅打印出每一行的第一个元素,而没有给出任何错误消息。

#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 :(得分:3)

问题出在以下一行:if(j = 9)。您需要一个双等于比较。在这里,您要分配给j,这将使其跳过该行的其余部分。

主动提供的建议:

  1. 避免对常量进行硬编码(例如7、10、9)。将sizeof用于数组,或至少使用常量值,例如const auto rows = 7;
  2. 如果您获得的地图复杂得多或更大,则可能应该从原始数组移至std::vectorstd::array。如果这样做,则可以使用myGrid.size()myGrid[row].size()来解决#1。
  3. Use '\n' rather than std::endl