C++ 2D 数组写入多个位置
C++ 2d array writing into multiple places
我正在尝试编写一个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 个int
s,您可以使用以下方法访问:
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
数组,其索引从0
到9
- 对数组元素的操作:当您尝试使用数组并执行某些操作时,
[]
中的值是数组中的索引。testArray[5] = 20;
在这里,我们将6th element
的值(位于索引 5 处,因为索引从0
和1
开始(更改为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;
}
相关文章:
- 将值指定给向量(2D)的向量中的某个位置
- 识别 2D 矢量C++中的位置
- C++ 2D 数组写入多个位置
- 创建 2D 数组0xCCCCCCCC访问冲突写入位置
- 查找 2D 向量的位置,该向量是类C++的一个元素
- 如何在C 2D向量中找到对象(而不是int)的位置
- qt如何连接QPushButton的2D数组并返回位置
- C 2D char阵列有时会在随机位置复制数据
- OPENCV(C ) - 从已知的3D对象和相机位置计算图像的2D坐标
- 如何在 2D 碰撞检测中正确解析碰撞的位置?
- (C++)在圆内夹紧 2D 位置(使用中点圆算法绘制)
- 在动态2D布尔数组中更改一个值似乎会更改不同数组中不同位置的值
- 如何将向量插入2D矢量的定义位置
- C - 输入一系列1s和0s.然后自动分配给2D数组中的相应位置
- C++ 在 2D std::vector 中查找最大值的位置
- C++2D矢量设置矢量内的位置
- 从2D纹理上的位置(x,y)计算.obj文件中的vt(u,v)坐标
- 在3D世界中的显示器上固定位置绘制2D文本-OpenGL
- 在单目视觉里程计中使用 3D-2D 运动估计的相机位置
- 如何使用 FTGL 显示文本固定位置 2d