2013-02-13 3 views
1

Я работаю над приложением. Я использую:C rand() на самом деле не случайный

int rand_num = rand() % 100; 

Чтобы получить случайное число от 0 до 99. Теперь, скажем, я получил 41, а затем перезапустить мое приложение, это всегда 41. То же последовательность снова и снова, значит, это не действительно случайный.

Какие-либо решения?

ответ

4

rand генерирует псевдослучайное число, да. Но вы можете установить семя.

srand(time(NULL)); 
int rand_num = rand() % 100; 

Установите семена только один раз.

Или вы можете использовать один из методов от <random>.

+0

Кажется, это работает как шарм. Спасибо, Лучиан! :) –

6

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

+0

Я действительно не понимаю ... Есть ли шанс получить снайпер, какая-то функция вроде random (min, max) ;? Я был бы великолепен! –

+0

@ Ариэль задает интервал, вы можете сгенерировать псевдослучайное число, выполнив 'rand()% (max-min)' и увеличивая его на 'min' – JosephH

2

Используйте следующее:

#include<time.h> 

srand(time(NULL)); 

Это изменит семя псевдослучайного генератора.

Для получения дополнительной информации см. this.

2

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

Смежные вопросы