Как напечатать 2D-массив с точками внутри них в C

#arrays #c

#массивы #c

Вопрос:

как бы я ввел 2D-массив на C, заполненный точками?

Вот код, который я написал до сих пор, но я все еще не вижу вывода 2D-массива с точками.

 #include <stdio.h>
#include <stdlib.h>

#define PLAYER_NONE 0
#define PLAYER 1
#define PLAYER_CPU 2

int i; // Global Variable for column and row
int j; // Global Variable for column and row

char playerBoard[8][8]; //Global Variable
char cpuBoard[8][8]; // Global Variable

//Initialise the main parts of the board

void initialise_board(void)
{
   for (int i = 0; i < 8; i  ) { //iterate the rows
       for (int j = 0; j < 8; j  ) {
           cpuBoard[i][j] = '.';
        }
   }

   for (i = 0; i < 8; i  ) {
       for (j = 0; j < 8; j  ) {
           playerBoard[i][j] = '.';
       }
   }
}

int main(int argc, char *argv[])
{
   initialise_board();

   while (!check_win()) {
       display_board();
       get_move(turn);
       turn = (turn == 1) ? 2 : 1;

   return 0;
}
  

//Отображать доску battleship при выполнении хода

 void display_board()
{

   printf("n");
   for (char i = 'A'; i < 'H'   1; i  ) {
       printf("%c", i);
   }
   printf("n");

   for (i = 1; i < 8   1; i  ) {
       printf("%d",i);
       for (j = 0; j < 8; j  ) {
       }
       printf("n");
   }
   printf("===");
   printf("n");
}
  

Любая помощь была бы высоко оценена, большое вам спасибо

Комментарии:

1. Вы присваиваете значения, но никогда не отображаете свой массив

2. Привет @Cid, у меня есть функция display_board, но она отдельная, поскольку выводит заголовки строк и столбцов, при необходимости я могу это показать?

3. Пожалуйста, покажите функцию, которую вы используете для отображения, поскольку ваша проблема, похоже, связана с этим.

4. Можете ли вы отредактировать свой пост и поместить в него свою функцию? Спасибо.

5. Поскольку я отредактировал ваш пост, у вас отсутствует закрывающая скобка } в вашем main после while .

Ответ №1:

Иногда при устранении неполадок, которые кажутся неразрешимыми, хорошей идеей является удаление всех отвлекающих факторов из кода:

Запустите упрощенную main() функцию:

 int main(int argc, char *argv[])
{
   initialise_board();

   //while (!check_win()) {
       display_board();
   //    get_move(turn);
   //    turn = (turn == 1) ? 2 : 1;

   return 0;
}
  

И вы увидите некоторые выходные данные, которые затем вы можете отладить, чтобы настроить по мере необходимости.

Однако, как вы указываете в своих комментариях, вы не видите выходные данные. Если вы присмотритесь, вы обнаружите, что это потому, что вы никогда не включаете cpuBoard or playerBoard в инструкцию printf, такую как:

  printf("%c", cpuBoard[i][j]);
  

Следующее не закончит это за вас, но поможет вам начать:

 void display_board(void)
{
   //printf("n");//removed for illustration
   //for (char i = 'A'; i < 'H'   1; i  ) {
   //    printf("%c", i);
   //}
   printf("n");

   for (i = 1; i < 8; i  ) 
   {
       for (j = 0; j < 8; j  ) 
       {
            printf("%c", cpuBoard[i][j]); //illustrates printout of populated array cpuboard.
       }
       printf("n");
   }
   printf("===");
   printf("n");
}
  

Комментарии:

1. Привет, я запустил упрощенную версию, как вы сказали, но я по-прежнему получаю тот же результат с массивом, но без точек в нем. Однако, когда я также прокомментировал display board, я ничего не получаю, он пустой.

Ответ №2:

Ваш код выглядит нормально. Проверьте наличие открывающих и закрывающих скобок и добавьте следующий оператор в функцию initializeboard() :

 for (i = 0; i < 8; i  ) { 
    for (j = 0; j < 8; j  ) { 
        printf("%c",playerBoard[i][j]); 
    } 
}
  

Комментарии:

1. Привет, Фара, это не помогло 🙁

2. …Но это решает основную проблему, связанную с невключением массива в инструкцию printf…

3. …Попробуйте вернуть array из функции initializeboard и передать его в displayboard в качестве аргумента