C - Цикл "сажать мины" в 2D Array Minesweeper не работает - PullRequest
0 голосов
/ 10 ноября 2019

Мне было поручено создать простой клон Сапер для класса C / C ++. Это требует некоторого использования двумерного массива 10x10 в качестве минного поля.

Мне нужно будет расположить 5 мин случайным образом на поле. Пустые пятна должны быть заполнены пробелом (''), а пятна с минами должны быть заполнены хешем ('#').

Вот код для создания 2D-массива. Массив был объявлен вне (выше) функции main (), но был инициализирован внутри функции main ():

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

static char minefield[10][10];

main(){

    for (int row = 0; row < 10; row++){
        for (int colm = 0; colm < 10; colm++){
            minefield[row][colm] = ' ';
        }
    }
...

При этом я объявил массив и заполнил все пробелы пробелами. У меня есть код для распечатки массива, и он, кажется, содержит другие символы. Однако я не могу сказать, заполняет ли этот массив массив пробелами или чем-то еще, например, null.

Далее, часть, в которой, как мне кажется, проблема заключается: Установка мин. Мины должны быть размещены в пяти случайных местах по всему массиву, который обрабатывается циклом for. Цикл также проверяет, занято ли пространство, и будет продолжать цикл до тех пор, пока пять мин не будут успешно установлены.

...  
    srand(time(0)); //Defining seed for random

    int randRow;
    int randColm;

    for (int count = 0; count < 5;){
        randRow = rand() % 10;
        randColm = rand() % 10;
        if (minefield[randRow][randColm] != ' '){ //tests if space is occupied
            continue;
        }
        minefield[randRow][randColm] = '#'; //planting the mine
        count++;
    }
...

После некоторой отладки я обнаружил, что код, кажется, останавливается / зависает в

minefield[randRow][randColm] = '#';

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

Кажется, моя среда IDE не сообщает об ошибках (я использую кодовые блоки).

Что я делаю не так?

1 Ответ

0 голосов
/ 11 ноября 2019

Примечание:

Я допустил ошибку в коде, который не был показан. Я помещаю переменную непосредственно в функцию put () (например, put (переменная)) вместо использования printf (например, printf ("% c", переменная)), что приводит к зависанию программы.

Это не было 'До тех пор, пока мне не показали сайт repl.it, на котором был отладчик, который показывал мне, что было не так.

Извините, если это кому-то мешало. Но все равно спасибо за помощь!

PS Может кто-нибудь знает, как я могу использовать эту функцию в моей IDE Codeblocks? Эта отладка была включена, когда я использовал Eclipse IDE для Java, но не по какой-то причине в Codeblocks. У меня мало опыта использования IDE.

...