#arrays #c #random #while-loop #random-seed
Вопрос:
Я хочу создать программу, которая генерирует 2 случайные координаты, а затем проверяет, является ли место в 2D-массиве, которое я создал ранее, пустым (значение в массиве равно 0). Если true, он помещает значение 2 в эти координаты, иначе он должен продолжать искать такое место. Проблема в том, что в некоторых случаях он работает на бесконечность.
Вот массив, который я создал:
int array[4][4] =
{
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
{0,0,0,0}
};
Вот остальная часть кода:
srand(time(NULL));
int ranadom_num[2] = { rand() % 4, rand() % 4 };
while (array[ranadom_num[0]][ranadom_num[1]] != 0)
{
int ranadom_num[2] = { rand() % 4, rand() % 4 };
}
array[ranadom_num[0]][ranadom_num[1]] = 2;
Любая помощь? 🙂
Комментарии:
1.
random_num
Определенные вне цикла и внутри цикла — это два разных объекта. Фактически тот, который находится в цикле, является другим объектом на каждой итерации.2. Как указано @EugeneSh. once
random_num
, либо это будет бесконечный цикл, либо без цикла. здесь вы можете увидеть рабочий код3. @TruthSeeker почему бы не опубликовать в качестве ответа?
Ответ №1:
Вы повторно объявляете ranadom_num
в цикле и не устанавливаете значение в массиве до тех пор, пока цикл не завершится, вот почему вы получаете бесконечный цикл.
srand(time(NULL));
int ranadom_num[2] = { rand() % 4, rand() % 4 };
while (array[ranadom_num[0]][ranadom_num[1]] != 0)
{
//now there's a chance that the array will have a 2 in it
array[ranadom_num[0]][ranadom_num[1]] = 2;
ranadom_num[0] = rand() % 4;
ranadom_num[1] = rand() % 4;
}
Ответ №2:
В данном фрагменте кода есть две переменные,
int ranadom_num[2] = { rand() % 4, rand() % 4 }; //here 1
while (array[ranadom_num[0]][ranadom_num[1]] != 0)
{
int ranadom_num[2] = { rand() % 4, rand() % 4 }; //here 2
}
таким образом, random_num
выбранный at 1
не изменяется внутри цикла, а random_num
at 2
бесполезен, поскольку он не используется в данной области (т.Е. Внутри цикла).
Обновленный код можно найти здесь,
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int
main ()
{
int array[4][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{0, 0, 0, 0}
};
srand (time (NULL));
int ranadom_num[2] = { rand () % 4, rand () % 4 };
while (array[ranadom_num[0]][ranadom_num[1]] != 0)
{
printf ("%d ", array[ranadom_num[0]][ranadom_num[1]]);
ranadom_num[0] = rand () % 4;
ranadom_num[1] = rand () % 4;
}
array[ranadom_num[0]][ranadom_num[1]] = 2;
return 0;
}
Вам также нужно позаботиться о значениях внутри array
. По крайней мере, один элемент должен быть zero
для завершения цикла, иначе это будет бесконечный цикл.