Я начинающий C программист, который должен создать начальную сетку для игры тральщика, где я должен создать 2 сетки: первая сетка печатает точки и звездочки (мины), сгенерированные случайной функцией, которая выбирает число между 0 и 1 для каждой ячейки, а вторая сетка сохраняет звездочки одинаковыми, но заменяет точки числом, указывающим, сколько мин касается этой ячейки.
Сейчас у меня есть условия, чтобы проверить для всех 8 клеток вокруг клетки, в которой находится мина, подсчитать количество мин, которые ее окружают. Однако, когда я печатаю, не все мины печатаются в виде звездочек, а некоторые печатаются в виде цифр, и я не уверен почему.
У меня есть условия для печати второй сетки, как будто ячейка содержит мою, она напечатает звездочку, а для всего остального отобразит число, подсчитанное счетчиком, который я установил ранее.
Мои счетчики правильны, но это только некоторые из ячеек, которые есть мины в них, которые не печатают звездочки. У меня также возникают проблемы с правильной печатью строк da sh в соответствии с длиной матрицы, и я не уверен, как это исправить.
Любая помощь, которую я могу получить, будет принята с благодарностью.
Пример того, что происходит здесь: https://i.stack.imgur.com/NnKyE.jpg
А это мой код:
#include <stdio.h>
#include "lab6.h" //THIS REPLACES <stdlib.h> AND USES A FUNCTION CALLED rand() TO GENERATE # BETWEEN 0-1
#define MAX 100
int m, n; //m rows, n columns
double p;
int main(void) {
//GET INPUT
printf("Enter the number of rows: ");
scanf("%d", &m);
printf("Enter the number of columns: ");
scanf("%d", &n);
do {
printf("Enter the probability p value: ");
scanf("%lf", &p);
}
while(p>1 || p<0);
//PRINT DASHED LINE
char dash[MAX];
int k;
for (k=0; k<m; k++) {
dash[k] = '-';
printf("%c", dash[k]);
}
printf("\n");
//PRINT ARRAY W/DOTS
char array[MAX][MAX];
int i, j;
for (i=0; i<m; i++) {
for (j=0; j<n; j++) {
double t=rand();
if (t<p) {
array[i][j] = '*';
}
else {
array[i][j] = '.';
}
printf("%c ", array[i][j]);
}
printf("\n");
}
//PRINT DASHED LINE
for (k=0; k<m; k++) {
dash[k] = '-';
printf("%c", dash[k]);
}
printf("\n");
//PRINT ARRAY W/NUMBERS
int num[MAX][MAX];
for (i=0; i<m; i++) {
for (j=0; j<n; j++) {
if (array[i][j] == '*') {
num[i-1][j]++; //1 row down, same column
num[i][j-1]++; //1 column left, same row
num[i-1][j-1]++; //1 row down, 1 column left
num[i+1][j]++; //1 row up, same column
num[i][j+1]++; //1 column right, same row
num[i+1][j+1]++; //1 row up, 1 column right
num[i+1][j-1]++; //1 row up, 1 column down
num[i-1][j+1]++; //1 row down, 1 column right
num[i][j] = -1; //mine
}
}
}
for (i=0; i<m; i++) {
for (j=0; j<n; j++) {
if (num[i][j] == -1) {
printf("* ");
}
else {
printf("%d ", num[i][j]);
}
}
printf("\n");
}
//PRINT DASHED LINE
for (k=0; k<=m; k++) {
dash[k] = '-';
printf("%c", dash[k]);
}
printf("\n");
return 0;
}