C++ 2D 数组写入多个位置

C++ 2d array writing into multiple places

本文关键字:位置 2D 数组 C++      更新时间:2023-10-16

我正在尝试编写一个C++国际象棋游戏的控制台,每当我在诸如 07 它会将信息放在其他地方,例如 10.

我还收到缓冲区溢出警告Board[0][0] = 'C';

void Setup(char Board[7][7])
{
// sets all board spaces to a period
for (int a = 0; a < 8; ++a)
{
for (int b = 0; b < 8; ++b)
{
Board[a][b] = '.';
}
}
//place pieces
{
Board[0][0] = 'C';
Board[0][7] = 'C';
Board[7][0] = 'c';
Board[7][7] = 'c';
Board[0][1] = 'H';
Board[0][6] = 'H';
Board[7][1] = 'h';
Board[7][6] = 'h';
Board[0][2] = 'B';
Board[0][5] = 'B';
Board[7][2] = 'b';
Board[7][5] = 'b';
Board[0][3] = 'Q';
Board[0][4] = 'K';
Board[7][3] = 'k';
Board[7][4] = 'q';
for (int p = 0; p < 8; ++p)
{
Board[1][p] = 'P';
Board[6][p] = 'p';
}
}
cout << "setup complete" << endl;
}
void Display(char Board[7][7])
{
for (int a = 0; a < 8; ++a)
{
for (int b = 0; b < 8; ++b)
{
cout << Board[a][b] << " ";
}
cout << endl;
}
}
int main()
{
static char Board[7][7];
int Winner = 0;
Setup(Board);
while (Winner == 0)
{
//turn1
//turn2
Display(Board);
break;
}
//winner
return 0;
}

这将输出:

setup complete
C H B Q K B H P
P P P P P P P P
P . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . p
p p p p p p p p
p h b k q b h c

棋子从来没有像 07 那样写到位,但不知何故它们会出现在那里。 老实说,我不知道我做错了什么。

创建数组时:

int foo[4];

数字 4 表示您将拥有 4 个ints,您可以使用以下方法访问:

foo[0]
foo[1]
foo[2]
foo[3]

因此,当您用两个 7 创建char Board[7][7]时,您会得到一个 7x7 的棋盘(因为 0、1、2、3、4、5 和 6 总共是 7 个数字,而不是 8(,因此不是 8x8 棋盘。

因此,只需用Board[8][8]替换任何Board[7][7],您就会没事的。

问题是将Baord视为7x7数组。在提供的代码中,char Board[7][7]char Board[8][8]

在使用数组时,请记住以下几点:

声明/定义
  • :当您在此时声明/定义数组时,[]中的值是数组的大小int testArray[10];在这里,我们定义了一个大小10数组,其索引从09
  • 对数组元素的操作:当您尝试使用数组并执行某些操作时,[]中的值是数组中的索引testArray[5] = 20;在这里,我们将6th element的值(位于索引 5 处,因为索引从01开始(更改为20
  • 元素和索引:如上行所述,Index in array starts from 0.所以第一个元素将在索引0处,第二个元素在索引1处,依此类推,即Nth element将处于指数N-1

以下是更正的代码。 您可以在此处看到它的工作原理:

#include <iostream>
#define ARRAY_SIZE 8
using namespace std;
void Setup(char Board[ARRAY_SIZE][ARRAY_SIZE])
{
// sets all board spaces to a period
for (int a = 0; a < ARRAY_SIZE; ++a)
{
for (int b = 0; b < ARRAY_SIZE; ++b)
{
Board[a][b] = '.';
}
}
//place peices
{
Board[0][0] = 'C';
Board[0][7] = 'C';
Board[7][0] = 'c';
Board[7][7] = 'c';
Board[0][1] = 'H';
Board[0][6] = 'H';
Board[7][1] = 'h';
Board[7][6] = 'h';
Board[0][2] = 'B';
Board[0][5] = 'B';
Board[7][2] = 'b';
Board[7][5] = 'b';
Board[0][3] = 'Q';
Board[0][4] = 'K';
Board[7][3] = 'k';
Board[7][4] = 'q';
for (int p = 0; p < ARRAY_SIZE; ++p)
{
Board[1][p] = 'P';
Board[6][p] = 'p';
}
}
cout << "setup complete" << endl;
}
void Display(char Board[ARRAY_SIZE][ARRAY_SIZE])
{
for (int a = 0; a < ARRAY_SIZE; ++a)
{
for (int b = 0; b < ARRAY_SIZE; ++b)
{
cout << Board[a][b] << " ";
}
cout << endl;
}
}
int main()
{
static char Board[ARRAY_SIZE][ARRAY_SIZE];
int Winner = 0;
Setup(Board);
while (Winner == 0)
{
//turn1
//turn2
Display(Board);
break;
}
//winner
return 0;
}