【问题标题】:Tic tac toe 2d array filling charachter井字游戏二维数组填充字符
【发布时间】:2018-10-30 22:36:01
【问题描述】:

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

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++;
        }
    }
}

为此我得到答案current output 如果这样写

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

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

【问题讨论】:

    标签: c++11 tic-tac-toe


    【解决方案1】:
    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++;
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

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

      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 数组分配一个字符。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-15
        • 2013-04-11
        • 2015-06-12
        • 2015-01-08
        相关资源
        最近更新 更多