在C++中创建多维数组棋盘的问题

Div*_*ega 1 c++ arrays char multidimensional-array

我正在尝试用C++创建一个基本的棋盘并输出它.

我设置了一个多维板字符数组作为初始测试,并将字符放入表示每个字符.这个输出奇数结果,所以我把代码剥离到下面,这是为了创建一个有两行棋子和每个角落的车,标记为a,b,c和d的棋盘.

#include <string>
using namespace std;

class Game
{
    public:

    int turn;
    char player;
    char board[7][7];

    Game()
    {
        turn = 1;
        player = 'w';

        int x,y;
        for(y=0;y<=7;y++) for(x=0;x<=7;x++) board[x][y] = '.';
        board[0][0] = 'a';
        board[7][0] = 'b';
        board[0][7] = 'c';
        board[7][7] = 'd';
        for(x=0;x<=7;x++) board[x][1] = 'p';
        for(x=0;x<=7;x++) board[x][6] = 'p';

    }

    string getBoard()
    {
        string result = "";
        int x,y;
        for(y=0;y<=7;y++)
        {
            for(x=0;x<=7;x++) result += board[x][y];
            result += "\n";
        }
        return result;
    }
};
Run Code Online (Sandbox Code Playgroud)

我正在使用以下测试:

Game game;
cout << game.getBoard();
Run Code Online (Sandbox Code Playgroud)

并得到以下结果:

ac.....b
pppppppp
........
........
........
........
pppppppp
c.....bd
Run Code Online (Sandbox Code Playgroud)

任何想法为什么车被复制而不只是出现在角落里?我似乎无法追查这个问题.

cod*_*ict 7

由于棋盘的尺寸为8x8,因此将您的纸板声明更改为:

char board[8][8];
Run Code Online (Sandbox Code Playgroud)

您当前的阵列大小为7x7,

char board[7][7];
Run Code Online (Sandbox Code Playgroud)

由于C++数组是基于0的,因此7不是这两个维度的有效索引.所以你做不到:

for(x=0;x<=7;x++) board[x][1] = ...
Run Code Online (Sandbox Code Playgroud)

要么

board[0][7] = 'c';
Run Code Online (Sandbox Code Playgroud)