1

我正在尝试使用井字游戏创建 4x4 板,这就是我正在使用的功能。此功能将板重置为默认值,必须像此 默认值

void resetBoard(char board[4][4])                                   
{
    for (int i = 0; i < 4; i++)                                     
    {
        int boardcounter = 1;
        for (int j = 0; j < 4; j++)
        {
            board[i][j] = '0' + boardcounter;
            boardcounter++;
        }
    }
}

为此,我得到答案当前输出 ,如果这样写

 for (int j = 0; j < 3; j++)
    {
        board[i][j] = (char) boardcounter;
        boardcounter++;
    }

董事会变得非常糟糕,我该如何改变它,以便该人可以输入字符 A,...,G 代表董事会中的 10-16。

4

2 回答 2

0

我不确定您发布的图像是您在上面发布的代码的输出。我必须更改您发布的代码才能获得该输出:

void resetBoard(char board[4][4])
{
    int boardcounter = 1;

    for (int i = 0; i < 4; i++)
    {
        for (int j = 0; j < 4; j++)
        {
            board[i][j] = '0' + boardcounter;
            boardcounter++;
        }
    }
}

如果不清楚更改是什么,我将线移到int boardcounter = 1;循环之外。

此代码产生您发布的图像中显示的输出的原因与ASCII编码系统有关。

如果您查看该链接中的表格,您可以看到 '0' 的 ASCII 代码是 48。当 boardcounter 为 1 时,值'0' + boardcounter将是 49,即 1 的代码。随着程序在循环中移动,'0' + boardcounter移动到 50(2 的代码)、51(3 的代码)等等。

当 boardcounter 达到 10 时,'0' + boardcounter将是 58,这是 : 的代码。这就是为什么您在发布的图像中获得该符号的原因。当 boardcounter 为 11、12、13、14、15 和 16 时,类似的注释也适用。

所以现在解释了奇怪输出的原因,问题是如何得到你想要的输出。一种方法是使用 and if 语句来检查 boardcounter 是在 1 和 9 之间还是在 10 和 16 之间。如果它在 1 和 9 之间,您可以使用您发布的代码。如果 boardcounter 介于 10 和 16 之间,您可能希望使用类似的行将board[i][j] = 'A' + (boardcounter-10);字符分配给 board 数组。

于 2018-10-31T01:27:22.830 回答
0
void resetBoard(char board[4][4])                                   
{
    for (int i = 0; i < 4; i++)                                     
    {
        int boardcounter = 1;
        for (int j = 0; j < 4; j++)
        {
            char offset = '0';

            if( boardcounter > 9 )
            {
                offset = 'A' - 10;
            }

            board[i][j] = offset + boardcounter;
            boardcounter++;
        }
    }
}
于 2018-10-30T22:50:25.457 回答