0

我正在尝试为课堂制作一个快速的井字游戏,但我为 X 和 O 创建的两个字符遇到了问题。我们必须用于分配的一些代码,所以我不能只有一个标准数组. 每次我将它们放入 char*[] 时,它们都会显示在它们之后创建的任何字符。

以下是我正在使用的部分代码。

char *spots[] = {"1","2","3","4","5","6","7","8","9"};
char player1 = 'X';
char player2 = 'O';

要打印板子的第一行,我们需要使用下面的类:

cout << spots[0] << " | " << spots[1] << " | " << spots[2] << endl;

打印 1 | 2 | 3

下面是我如何将值分配给数组:

spots[1]= &player1;

所以如果我在棋盘上为 player1 选择 2,它会打印:
1 | XO | 3

然后我为 player2 选择 3:
1 | XO | ○

如果我添加第三个字符:

char player1 = 'X';
char player2 = 'O';
char test = 'T';

然后它会打印以下内容:
1 | XOT | 3
1 | XOT | 旧约

我觉得这与字符位置有关,但我无法修复它。

4

2 回答 2

2

你可以使用:

char *spots[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
char *player1 = "X";
char *player2 = "O";

然后分配:

spots[i] = player1;

类型是一致的:spots是 的数组char *,并且将char *字符串分配给数组中的一个条目是有意义的 - 它是指向分配的以 null 结尾的字符串的指针,与 中的其他值相同spots

您可能要考虑:

char *player[] = { "?", "X", "O" };

然后你可以使用:

spots[i] = player[j];

当然,这"?"允许您使用编码12播放器。

使用您的代码,您将单个字符的地址而不是字符串分配给该点,然后打印代码读取直到找到空值,从而导致混乱。

于 2013-07-26T20:36:40.390 回答
1

你打电话时

std::cout << spots[1] 

您正在打印一个以空字符结尾的字符串。

通过做

spots[1]= &player1;

您没有将null终止符显式设置player1为 type char

您应该执行以下操作

char const* spots [] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
char const* player1 = "X";
char const* player2 = "O";
spots[1] = player1;
于 2013-07-26T20:36:58.123 回答