rand() возвращает тот же номер

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

Это код:

#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 = Случайный номер 6 = 40 Случайный номер 7 = 40 Случайный номер 8 = 40 Случайный номер 9 = 40

2 ответа

Решение

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

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

Неоднократно звонил srand рушит статистические свойства генератора.

Называйте это не более одного раза.

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

Другие вопросы по тегам