我正在尝试为类快速制作TicTacToe游戏,并且遇到了我为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 | 0
如果我添加第3个字符:
char player1 = 'X';
char player2 = 'O';
char test = 'T';
然后打印下面的内容:
1 | XOT | 3
1 | XOT | OT
我觉得这与char位置有关,但我无法修复它。
答案 0 :(得分: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];
"?"
允许您为玩家使用编码1
和2
。
使用您的代码,您将单个字符的地址而不是字符串分配给该点,然后打印代码将一直读取,直到找到空值,从而导致混淆。
答案 1 :(得分:1)
致电时
std::cout << spots[1]
您正在打印 null 已终止的字符串。
通过
spots[1]= &player1;
您未明确设置 null 终结符,因为player1
的类型为char
。
您应该执行以下操作
char const* spots [] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
char const* player1 = "X";
char const* player2 = "O";
spots[1] = player1;