Переполнение матрицы символов

Код очень прост, я пытаюсь сделать игру на линкоре, но все еще на ранних стадиях

#include <stdio.h>

void main()
{
int i = 0;                                   /* Loop counter  */
int player = 0;                              /* Player number - 1 or 2  */
int go = 0;                                  /* Square selection number for turn */
int row = 0;                                 /* Row index for a square  */
int column = 0;                              /* Column index for a square  */
int line = 0;                                /* Row or column index in checking loop */
int winner = 0;                              /* The winning player  */
char board[8][8] = {                         /* The board                            */
                   {'1','2','3','4','5','6','7','8'},               /* Initial values are reference numbers */
                   {'9','10','11','12','13','14','15','16'},        /* used to select a vacant square for   */
                   {'17','18','19','20','21','22','23','24'},        /* a turn.                              */
                   {'25','26','27','28','29','30','31','32'},
                   {'33','34','35','36','37','38','39','40'},
                   {'41','42','43','44','45','46','47','48'},
                   {'49','50','51','52','53','54','55','56'},
                   {'57','58','59','60','61','62','63','64'}
                 };

/* The main game loop. The game continues for up to 64 turns */
/* As long as there is no winner                            */
for( i = 0; i<64 && winner==0; i++)
{
  /* Display the board */
printf("\n\n");
  printf(" %2c | %2c | %2c | %2c | %2c | %2c | %2c | %2c\n", board[0][0], board[0][1], board[0][2], board[0][3], board[0][4], board[0][5], board[0][6], board[0][7]);

  printf(" %2c | %2c | %2c | %2c | %2c | %2c | %2c | %2c\n", board[1][0], board[1][1], board[1][2], board[1][3], board[1][4], board[1][5], board[1][6], board[1][7]);

  printf(" %2c | %2c | %2c | %2c | %2c | %2c | %2c | %2c\n", board[2][0], board[2][1], board[2][2], board[2][3], board[2][4], board[2][5], board[2][6], board[2][7]);

  printf(" %2c | %2c | %2c | %2c | %2c | %2c | %2c | %2c\n", board[3][0], board[3][1], board[3][2], board[3][3], board[3][4], board[3][5], board[3][6], board[3][7]);

  printf(" %2c | %2c | %2c | %2c | %2c | %2c | %2c | %2c\n", board[4][0], board[4][1], board[4][2], board[4][3], board[4][4], board[4][5], board[4][6], board[4][7]);

  printf(" %2c | %2c | %2c | %2c | %2c | %2c | %2c | %2c\n", board[5][0], board[5][1], board[5][2], board[5][3], board[5][4], board[5][5], board[5][6], board[5][7]);

  printf(" %2c | %2c | %2c | %2c | %2c | %2c | %2c | %2c\n", board[6][0], board[6][1], board[6][2], board[6][3], board[6][4], board[6][5], board[6][6], board[6][7]);

  printf(" %2c | %2c | %2c | %2c | %2c | %2c | %2c | %2c\n", board[7][0], board[7][1], board[7][2], board[7][3], board[7][4], board[7][5], board[7][6], board[7][7]);

Я пытаюсь получить вывод как то

1  |  2  |  3  |  4  |  5  |  6  |  7  |  8
9  |  10 |  11 |  12 |  13 |  14 |  15 |  16
17 |  18 |  19 |  20 |  21 |  22 |  23 |  24

и до 64, но вместо этого я получаю

1  |  2  |  3  |  4  |  5  |  6  |  7  |  8
9  |  0  |  1  |  2  |  3  |  4  |  5  |  6
7  |  8  |  9  |  0  |  1  |  2  |  3  |  4

и так далее... Показывает только цифру справа от числа

Что касается сообщения об ошибке, я получаю это о том, что следует за char board[8][8]и это для всех 8 строк

Несколько маркеров на этой линии

-overflow in implicit constant conversion [-Woverflow]

-multi-character character constant [-Wmultichar]

Я довольно новичок в c/anci-c, поэтому любая информация поможет

2 ответа

Решение

Вы выбрали свой board быть типа char, что означает, что все, что он содержит, должно быть ровно 1 символ. Однако вы назначаете "10", "11" и т. Д., И они содержат 2 символа. Таким образом, компилятор пытается преобразовать 2 символа в 1 символьный символ. Но поскольку 2 > 1, он переполняется, что приводит к назначению только одного символа (очевидно, последнего). Кроме того, поскольку это в основном предположение для части системы, оно также дает вам второе сообщение об ошибке.

Вы хотели бы изменить свой board введите от char в string или же int (конечно, удаляя одинарные кавычки вокруг чисел). Вы также хотели бы вас printf() функция изменена на правильный формат.

Это недопустимые символы {'17','18','19','20','21','22','23','24'}, так как они состоят из 2 символов. Если вы хотите сохранить текст длиной более 1 символа, вам нужна строка или если вам нужно число, вы должны удалить одинарные кавычки. В любом случае, ваш printf Заявления также должны быть изменены, как вы бы хотели %2s или же %2d

Другие вопросы по тегам