对数组的引用,并没有按预期工作

Joe*_*ing 1 c++ arrays reference

问候,

自从我上一次关于C++的问题以来,我实际上学到了很多东西.我现在对课程很满意,对指针和参考文献感到不舒服.

请注意,我不是要求你解决我的问题,我问为什么我没有得到希望的结果.

这里有一些代码片段可以帮助我解释这个问题:我正在制作一个基于控制台的井字游戏(最近开始学习C++,这个imo是一个很好的方法)

main.cpp中:

//Here I initalise 1 variable and an array
int move;
char board[9] = {' ',' ',' ',' ',' ',' ',' ',' ',' '};
Run Code Online (Sandbox Code Playgroud)

第一个问题:有没有更好的方法来定义char数组中的空格?我这样做的原因是,我希望我的tictactoe板在X或O尚未设置时包含空格.

main.cpp中:

if(referee.validateMove(board, move))
{
   board[move] = player2.getToken();
   displayBoard(board);
}
Run Code Online (Sandbox Code Playgroud)

这里发生的事情很容易理解,但无论如何我都会解释;

从对象裁判员调用validateMove方法,并传递2个参数,即玩家选择的移动(在0-8之间).和tictactoe板.

Referee.cpp

bool Referee::validateMove(const char (&board)[9], int& move)
{
    if(board[move] != 'X' || 'O')
    {
        return true;
    } 
    else 
    {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是主要问题所在,我的最后一个问题就出现了.如前所见,我传递了一个大小为9的字符数组.

对move变量的引用效果很好(我应该使用引用还是指针?)并且它包含了希望的结果.

在这一点上,假设玩家1刚刚移动并在第2位放置了一个令牌,我现在想将我的令牌作为第二个位置放置在第二个位置

当我使用visual studio进行调试时,我得到以下内容:

0x0024faa8 "  O      ÌÌÌÌÌÌÌÌÌÌÌ"
Run Code Online (Sandbox Code Playgroud)

这是我把鼠标放在board参数上的时候.所以董事会确实知道,它已被占用.

然而,为什么validateMove方法总是返回true,并且board [move]永远不会等于O或X?

感谢您抽出宝贵时间阅读我的问题.如果您有疑问,或者我在愚蠢的事情中解释了某些内容,您会看到无效的命名约定,请通知我.我是学生,我想尽可能多地接受.

此问题已得到解决.感谢那些已经回答的人.非常感谢它.

Bjö*_*lex 5

你的病情归结为:

if((board[move] != 'X') || ('O'))
Run Code Online (Sandbox Code Playgroud)

'O'true在这种情况下总会评估,所以你总是通过这个条件.你想要的是这个:

if((board[move] != 'X') && (board[move] != 'O'))
Run Code Online (Sandbox Code Playgroud)

要验证,此代码对我来说运行正常:

#include <iostream>

bool validateMove(const char (&board)[9], int move)
{
    if((board[move] != 'X') && (board[move] != 'O'))
    {
        std::cout << "True" << std::endl;
        return true;
    } 
    else 
    {
        std::cout << "False" << std::endl;
        return false;
    }
}


int main()
{
    char board[9] = {' ',' ','O',' ','X',' ',' ',' ',' ',};

    validateMove(board, 0);
    validateMove(board, 2);
    validateMove(board, 4);
}
Run Code Online (Sandbox Code Playgroud)

输出是:

True
False
False
Run Code Online (Sandbox Code Playgroud)