#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