2013-03-15 3 views
0

Для справки я следовал за этим thread.Пользовательская функция rand() возвращает то же значение

Я называю эту функцию из функции main(), которая возвращает случайное значение в диапазоне [0, N]:

int randr(int min, int max) { int r = (rand() % (max+1-min)+min); return r; } 

например:

int main() 
{ 
unsigned int r=128; 
while(r--) 
{ 
    int a = randr(0, 63); 
    int b = randr(64, 127); 
    printf("%d %d\n", a, b); 
} 
return 0; 
} 

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

+0

Любое учебное пособие по случайным числам даст ответ. – chris

+1

Перед использованием rand() необходимо установить произвольное семя. – taocp

+3

Возможный дубликат [Почему у меня всегда получается одна и та же последовательность случайных чисел с rand()?] (Http://stackoverflow.com/questions/1108780/why-do-i-always-get-the-same-sequence -of-random-numbers-with-rand) – Blastfurnace

ответ

4

От человека странице rand:

rand() функция возвращает псевдослучайное целое число в диапазоне от 0 до RAND_MAX включительно (т.е. математический диапазон [0, RAND_MAX]).

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

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

Последнее предложение особенно актуально. С тем же семенем вы всегда будете получать одну и ту же последовательность псевдослучайных чисел. И так как вы не используете srand() явно, ваше семя всегда равно 1.

0

Пока семя является тем же самым rand, будет сгенерирована одна и та же последовательность.

1

Вы должны каждый раз вводить случайную последовательность с чем-то другим.

Наиболее обычным является srand((unsigned)time(NULL));.

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