Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;程序,发出将整数输入转换为字符的命令_C++_Arrays_Char_Static Cast - Fatal编程技术网

C++ C++;程序,发出将整数输入转换为字符的命令

C++ C++;程序,发出将整数输入转换为字符的命令,c++,arrays,char,static-cast,C++,Arrays,Char,Static Cast,我目前正在制作一个非常简单的TictaToe程序,但我遇到了一个小问题。我已经创建了一个使用二维字符数组的游戏板(不太喜欢使用字符,但我认为这是最简单的方法,可以让我在数组中输入X和O,然后在屏幕上输出) 在playerMove()函数中,我提示用户输入他想要放置游戏块的单元格(1-9)。输入以字符形式存储。然后我将他的单元格选择传递给MakeMove()函数,该函数检查用户输入的字符当前是否存储在数组中。但是,函数总是返回false 我意识到这是一个问题,编译器将输入视为一个整数,而不匹配数组

我目前正在制作一个非常简单的TictaToe程序,但我遇到了一个小问题。我已经创建了一个使用二维字符数组的游戏板(不太喜欢使用字符,但我认为这是最简单的方法,可以让我在数组中输入X和O,然后在屏幕上输出)

在playerMove()函数中,我提示用户输入他想要放置游戏块的单元格(1-9)。输入以字符形式存储。然后我将他的单元格选择传递给MakeMove()函数,该函数检查用户输入的字符当前是否存储在数组中。但是,函数总是返回false

我意识到这是一个问题,编译器将输入视为一个整数,而不匹配数组中的字符(因为如果我用字母替换数组中的元素,然后输入一个字母,它会找到匹配项),但我不确定如何解决这个问题。我尝试将ASCII值添加到字符中,并将字符输入更改为整数输入,然后将其静态转换为字符,但没有效果。在我决定完全消灭角色阵列之前,任何帮助都将不胜感激

class TicTacToe {
    private: 
    char board[3][3] =
        {
            {'1','2','3'},
            {'4','5','6'},
            {'7','8','9'}
        };
    public:
    void DrawBoard();
    void PlayerOneMove();
    bool MakePlay(char, char);
};

void TicTacToe::PlayerOneMove() {
    char cell;
    cout << "Player One, please select a cell: ";
    cin >> cell;

    while (!MakePlay(cell, 'O')) {
        cout << "That cell is unavailable. Please select another cell: ";
        cin >> cell;
    }
}

bool TicTacToe::MakePlay(char cell, char player) {
    for (int row = 0; row < 3; row++) {
        for (int col = 0; col < 3; col++) {
            if (board[row][col] == cell) {
                board[row][col] = player;
                return true;
            }
            else return false;
        }
    }
}

int main() {
    TicTacToe game;
    game.DrawBoard();
    game.PlayerOneMove();

    return 0;
}
classtictactoe{
私人:
字符板[3][3]=
{
{'1','2','3'},
{'4','5','6'},
{'7','8','9'}
};
公众:
空抽板();
无效移动();
bool-MakePlay(char,char);
};
void TicTacToe::player移动(){
炭细胞;
cout>细胞;
而(!MakePlay(单元格'O')){
cout>细胞;
}
}
bool TicTacToe::MakePlay(字符单元格,字符播放器){
对于(int行=0;行<3;行++){
for(int col=0;col<3;col++){
if(线路板[行][列]==单元){
棋盘[行][列]=玩家;
返回true;
}
否则返回false;
}
}
}
int main(){
提克托游戏;
游戏。抽屉();
game.playerMove();
返回0;
}

示例:

您在
MakePlay
中有一个逻辑错误

当您输入嵌套for循环时,它将检查输入是否与第一个单元格匹配,如果不匹配,它将返回false。其余的单元格将永远不会被检查

您要做的是检查所有单元格,如果与其中任何单元格不匹配,则返回false

你可以这样写:

bool TicTacToe::MakePlay(char cell, char player) {
    bool found_cell = false;
    for (int row = 0; row < 3; row++) {
        for (int col = 0; col < 3; col++) {
            if (board[row][col] == cell) {
                board[row][col] = player;
                found_cell = true;
            }
        }
    }
    return found_cell;
}
bool TicTacToe::MakePlay(字符单元格,字符播放器){
bool found_cell=false;
对于(int行=0;行<3;行++){
for(int col=0;col<3;col++){
if(线路板[行][列]==单元){
棋盘[行][列]=玩家;
找到的单元格=真;
}
}
}
返回找到的单元格;
}

我无法重现您的问题。请,包括您提供的输入和输出。()当我运行程序并在提示输入单元格时输入任何数字1-9时,程序告诉我该单元格不可用(返回false,即在数组中找到输入1-9)。我意识到字符“9”与整数9不同,并认为这就是问题所在,但我不确定如何将用户输入(1-9)转换为“1”-“9”,以便函数找到匹配项。
std::cin
不会返回
int
来回答您的问题,您可以使用ascii表查看如何转换字符/整数。例如,字符“0”是ascii 48。对于字符c,一个常见的技巧是:intx=c-48。这只适用于ascii,对于unicode或其他字符集,它会变得更复杂。非常感谢,这就是问题所在!我确信这是一个转换问题(因为我只测试了第一个单元格),以至于我甚至没有意识到我的return语句位于错误的位置。