Почему моя позиция не обновляется в моем 2D-массиве?

#c

#c

Вопрос:

Я пытаюсь обновить позицию игрока в 2D-массиве, который помещает маркер P. Когда я запускаю put 4 для строки и 4 для номера столбца, не похоже, что она сохранена с помощью моей функции mark board. Любая помощь или подсказка приветствуются. Я новичок в программировании на C.

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

//function declaration here

//draw board function- it draws the board
char board[6][6] = {
    {'0','0','0','0','0','0'},
    {'0','0','0','0','0','0'},
    {'0','0','0','0','0','0'},
    {'0','0','0','0','0','0'},
    {'0','0','0','0','0','0'},
    {'0','0','0','0','0','0'}
    };
void draw_board();

//mark board
char mark_board(int row_num, int column_num);

//main program
int main()
{
    //draw_board();
    int row_number;
    int column_number;

    printf("Which starting point you like to occupy?n");

    printf("row number: ");
    int player_row = scanf("%d", amp;row_number);

    printf("column number: ");
    int player_column = scanf("%d", amp;column_number);

    mark_board(player_row,player_column);
    
    draw_board();
    return 0;
}

//function definition here
void draw_board()
{
    printf("   1 2 3 4 5 6n");
    printf("   -----------n");
    for (int i = 0; i < 6; i  )// rows number
    {
        printf("%i| ", i   1);
        for (int j = 0; j < 6; j  )
        {
            printf("%c ", board[i][j]);
        }
        printf("n");
    } 
}

char mark_board(int row_num, int column_num)
{
    int i,j;
    char mark = 'P';
    for (i = 1; i < 7; i  )// rows number
    {
        for (j = 0; j < 6; j  ) //column number
        {
            board[row_num - 1][column_num - 1] = mark;
        }
    } 
    return board[i][j];
}
 

Вот мой вывод:
введите описание изображения здесь

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

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

2. int player_column = scanf("%d", amp;column_number); scanf возвращает количество прочитанных элементов, а не сам элемент, вы должны вызвать mark_board(row_number, column_number);

Ответ №1:

В вашей main() функции вы присваиваете результат scanf() player_row и player_column , учитывая, что ввод был правильным, он всегда был равен 1, поскольку вы получили 1 целое число с клавиатуры. Это должно сработать:

 int main(void)
{
    //draw_board();
    int row_number;
    int column_number;

    printf("Which starting point you like to occupy?n");

    printf("row number: ");
     if (scanf("%d", amp;row_number)!=1)
     {
         return -1;
     }

    printf("column number: ");
    if (scanf("%d", amp;column_number)!=1) //Checking the return value of scanf
    {
        return -1;
    }

    mark_board(row_number,column_number);
    
    draw_board();
    return 0;
}
 

Вам также следует рассмотреть возможность проверки диапазона ваших входных данных, вам не нужен индекс, который выходит за пределы вашего массива, то есть UB