2017-02-15 2 views
2

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

Это код:

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

int generate(int min, int max) 
{ 
    srand(time(NULL)); 
    return rand() % (max - min + 1) + min; 
} 

int main() 
{ 
    int i; 
    for (i = 0; i < 10; i++) 
    { 

     printf("Number random %d = %d\n", i, generate(1, 100)); 
    } 

    return 0; 
} 

Исполнение:

Число случайных 0 = 40 Число случайных 1 = 40 Число случайных 2 = 40 Число случайная 3 = 40 Число случайных 4 = 40 Число случайных 5 = 40 Число случайных 6 = 40 Число случайных 7 = 40 Число случайных 8 = 40 Число случайных 9 = 40

+2

Вы не должны принуждать новые семена каждого использования. Вы должны использовать '' srand'' при запуске приложения, а не каждый раз. Кстати, вы действительно должны использовать '' '' вместо старой школы '' rand''. –

+1

попробуйте запустить случайные числа один раз в начале вашей основной функции. – flotto

+0

Спасибо, это работает! –

ответ

4

Это потому, что вы пересев это каждый раз, и ваша программа, вероятно, работает очень быстро, ваше начальное значение (time()) одинаково для каждого вызова, так как наименьший приращение составляет 1 секунду.

Попробуйте двигаться srand() в main() вместо этого и назвать его однажды

1

Повторное вызов srand разрушает статистические свойства генератора.

Назовите его не более одного раза.

(Наблюдаемое поведение вызвано time(NULL) возвращая то же значение в каждой итерации цикла.)

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