【发布时间】:2011-03-24 17:56:20
【问题描述】:
您好,
自从我上一个关于 C++ 的问题以来,我实际上学到了很多东西。我现在对类很满意,只是对指针和引用不太满意。
请注意,我并不是要求你解决我的问题,我是在问为什么我没有得到想要的结果。
这里有一些代码 sn-ps 可以帮助我解释问题: 我正在制作一个基于控制台的井字游戏(最近开始学习 C++,这个 imo 是一个很好的方法)
main.cpp:
//Here I initalise 1 variable and an array
int move;
char board[9] = {' ',' ',' ',' ',' ',' ',' ',' ',' '};
第一个问题:有没有更好的方法来定义 char 数组中的空格? 我这样做的原因是,当尚未设置 X 或 O 时,我希望我的 tictactoe 板包含一个空白空间。
main.cpp:
if(referee.validateMove(board, move))
{
board[move] = player2.getToken();
displayBoard(board);
}
这里发生的事情很容易理解,但我还是会解释一下;
从对象裁判发出对 validateMove 方法的调用,并传递了 2 个参数,即玩家选择的移动(在 0-8 之间)。还有tictactoe板。
裁判.cpp
bool Referee::validateMove(const char (&board)[9], int& move)
{
if(board[move] != 'X' || 'O')
{
return true;
}
else
{
return false;
}
}
这是主要问题所在,我的最后一个问题出现了。 如前所述,我传递了一个大小为 9 的字符数组。
对 move 变量的引用效果很好(我应该使用引用还是指针?)并且它包含希望的结果。
此时,假设玩家 1 刚刚移动并在位置 2 放置了一个标记 我现在想将我的代币作为 PLAYER 2 放在位置 2
当我使用 Visual Studio 进行调试时,我得到以下信息:
0x0024faa8 " O ÌÌÌÌÌÌÌÌÌÌÌ"
这是我将鼠标放在板参数上的时候。 所以董事会确实知道,它被占用了。
为什么 validateMove 方法总是返回 true,并且 board[move] 永远不会等于 O 或 X?
感谢您花时间阅读我的问题。如果您有问题,或者我解释了一些愚蠢的事情,您看到无效的命名约定,请通知我。我是一名学生,我想尽可能多地学习。
此问题已解决。感谢那些已经回答的人。非常感谢。
【问题讨论】: