为什么我没有添加的项目显示在二维数组中?

问题描述 投票:0回答:1

我的代码有问题。

当我向二维数组添加一个元素时,它会添加两个元素。以下是一些有助于解释问题的输出:

Blank game board:

0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 

Adding to board: 7, 0
After adding first piece:

0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 7 
7 0 0 0 0 0 0 0 

Found a 7 at: 6, 7
Found a 7 at: 7, 0

我初始化一个二维数组(我已经在本地和全局尝试过),每个元素都为 0。然后我将一个游戏块添加到棋盘上。

这是我的完整代码:

#include <iostream>
#include <fstream>
#include <vector>
using namespace std;


// 2D array representing the board
int gameBoard[7][7];

// Translates chess code to array index
int translate(char letter){

  if ( letter == 'a' || letter == '8' ){
    return 0;
  } else if ( letter == 'b' || letter == '7' ){
    return 1;
  } else if ( letter == 'c' || letter == '6' ){
    return 2;
  } else if ( letter == 'd' || letter == '5' ){
    return 3;
  } else if ( letter == 'e' || letter == '4' ){
    return 4;
  } else if ( letter == 'f' || letter == '3' ){
    return 5;
  } else if ( letter == 'g' || letter == '2' ){
    return 6;
  } else if ( letter == 'h' || letter == '1' ){
    return 7;
  } else {
    return -1;
  }

}

// Displays current game board
void showBoard(){

  for (int i = 0; i <= 7; i++) {
    for (int j = 0; j <= 7; j++) {
      cout << gameBoard[i][j] << " ";
    }
    cout << endl;
  }
  cout << endl;
}

// Initiates game board
void initBoard(){

  for (int i=0; i <= 7; i++){
    for (int j=0; j <= 7; j++){

      gameBoard[i][j] = 0;

    }
  }

}

// Adds a piece to the board
void addPiece(string square){

  int x = translate(square[1]);
  int y = translate(square[0]);

  cout << "Adding to board: " << x << ", " << y << endl;
  gameBoard[x][y] = 7;

}

int main() {

  // Initialize game board with zeros
  initBoard();

  // Display 2d array (game board)
  cout << "Blank game board:\n\n";
  showBoard();

  // Place first piece on board
  string firstPiece = "a1";
  addPiece(firstPiece);

  // Display 2d array (game board)
  cout << "After adding first piece:\n\n";
  showBoard();


  for (int i = 0; i <= 7; i++){
    for (int j = 0; j <= 7; j++){

      if (gameBoard[i][j] == 7){

        cout << "Found a 7 at: " << i << ", " << j << endl;

      }

    }

  }


}



我可以确认“翻译”部分运行正常。这里所做的就是将 a1 转换为 7 和 0 作为行和列坐标。

如您所见,即使程序执行也同意仅将 1 个项目添加到板上。那么为什么我总是找到两个呢?任何帮助将不胜感激,谢谢!

我尝试以多种不同的方式声明数组(GameBoard),当我仅添加一个元素时,它仍然添加两个。我只想将一个元素添加到 GameBoard。

这个问题不会出现在我决定添加一块的每个方块上。有效方格与棋盘相关,因此 a1-h8。

c++ arrays 2d
1个回答
0
投票

当你用

int array[7]
声明一个数组时,数组的长度是7,所以最大索引是6。

int array[] = { 1, 2, 3, 4, 5, 6, 7 };
//       index: 0, 1, 2, 3, 4, 5, 6

当您使用大于最大索引(或小于零)的任何索引时,您正在访问不属于您的内存,如果该内存包含您的代码,这可能会导致崩溃等问题。

要解决此问题,请使用正确的长度初始化游戏板。国际象棋棋盘的尺寸为 8x8,因此您可以将行

int gameBoard[7][7];
更改为现在的
int gameBoard[8][8];
。在我的测试中,这解决了问题。

© www.soinside.com 2019 - 2024. All rights reserved.