Крестики-нолики 2d массив наполнения - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь создать доску 4х4, используя крестики-нолики, и эту функцию я использую. Эта функция сбрасывает плату по умолчанию, которая должна быть такой по умолчанию

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 на доске.

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Я не уверен, что отправленное вами изображение является результатом кода, который вы разместили выше. Мне пришлось изменить код, который вы разместили, чтобы получить такой вывод:

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 .

Если вы посмотрите на таблицу в этой ссылке, вы увидите, что ASCII-код для '0' равен 48. Когда Boardcounter равен 1, значение '0' + boardcounter будет 49, что является кодом для 1. Как программа перемещается по циклу, '0' + boardcounter перемещается к 50 (код для 2), 51 (код для 3) и так далее.

Когда счетчик достигнет 10, '0' + boardcounter будет 58, что является кодом для:. Вот почему вы получаете этот символ на изображении, которое вы опубликовали. Аналогичные замечания применимы, когда счетчик доски 11, 12, 13, 14, 15 и 16.

Итак, теперь, когда объяснена причина странного вывода, вопрос в том, как получить желаемый результат. Одним из способов является использование оператора if для проверки, находится ли Boardcounter между 1 и 9 или между 10 и 16. Если это между 1 и 9, вы можете просто использовать код, который вы разместили. Если Boardcounter находится между 10 и 16, вы можете использовать строку типа board[i][j] = 'A' + (boardcounter-10);, чтобы назначить символ массиву доски.

0 голосов
/ 31 октября 2018
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++;
        }
    }
}
...