Почему я получаю тот же результат с рэндом () каждый раз, когда я компилирую и работаю?

Сохраните их дисплеем заблокированный, дайте им ширину и оставленное плавание.

, Который заставит их сесть у стороны, которая похожа встроена, и должна поддержать стиль списка.

7
задан abyx 23 November 2009 в 15:07
поделиться

4 ответа

Вам необходимо заполнить функцию rand уникальным номером, прежде чем ее можно будет использовать. Самый простой способ - использовать time ()

Например

srand(time(NULL));
rand();//now returns a random number

Причина в том, что случайные числа, предоставляемые функцией rand () (или любой другой функцией на основе алгоритма), не случайны. Функция rand просто берет свое текущее числовое состояние, применяет преобразование, сохраняет результат преобразования как новое состояние и возвращает новое состояние.

Итак, чтобы заставить rand возвращать разные псевдослучайные числа, вы сначала должны установить состояние rand () к чему-то уникальному.

34
ответ дан 6 December 2019 в 04:51
поделиться

Вы хотите инициализировать ГПСЧ.

Инициализировать его один раз (обычно внутри main () ) с вызовом srand () .

Если вы не инициализируете PRNG, по умолчанию он инициализируется значением 1 . Конечно, инициализация его каким-либо другим постоянным значением не даст вам разных псевдослучайных чисел для разных запусков программы.

srand(1); /* same as default */
srand(42); /* no gain, compared to the line above */

Вам необходимо инициализировать значение, которое изменяется при каждом запуске программы. Значение, возвращаемое функцией time () , является наиболее часто используемым значением.

srand(time(NULL)); /* different pseudo random numbers almost every run */

Проблема с time (NULL) заключается в том, что оно возвращает то же значение в ту же секунду. Итак, если вы вызовете свою программу дважды в 11:35:17 того же дня, вы получите те же псевдослучайные числа.

9
ответ дан 6 December 2019 в 04:51
поделиться

Результатом rand является псевдо -случайное, что означает, что он выглядит эффективно случайным, но вычисляется каждый раз одинаково, начиная с специальное значение, называемое семенем. С тем же начальным значением вы получите ту же последовательность случайных чисел.

Чтобы установить другое начальное число, используйте стандартную функцию C void srand (unsigned int) один раз в своем коде, прежде чем вы начнете генерировать случайные числа. числа. Один из распространенных способов получения различной последовательности случайных чисел при каждом запуске программы - основывать начальное число на времени часов. Например, srand (clock ())

3
ответ дан 6 December 2019 в 04:51
поделиться

Просто чтобы добавить к ответу Якоби - я был немного удивлен, что по умолчанию не используется начальное число, основанное на времени, поэтому я просмотрел страницу руководства :

Если начальное значение не указано, функция rand () автоматически получает значение 1.

Таким образом, если вы измените свой код на использование seed (1) , вы все равно должны увидеть тот же результат. - но seed (time ()) заставит его изменяться каждый раз.

3
ответ дан 6 December 2019 в 04:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: