2012-03-14 2 views
2

Можно создать дубликат:
Generating random numbers in C
using rand to generate a random numbersПочему rand() всегда возвращает одно и то же значение?

Я пытаюсь генерировать случайные числа, но я постоянно получаю номер 41. Что может идти так неправильно в таких простой фрагмент?

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

int main(void) 
{ 
    int a = rand(); 
    printf("%d",a); 
    return 0; 
} 

Спасибо за помощь.

+1

это было предложено много раз на SO; поиск «случайных чисел в С» даст множество ответов. Тот, с которым я ссылаюсь, точно такой же, как ваш, даже создающий '41'. –

+0

Я уверен, что 41 был выбран случайным образом. Я просто попытался выбрать случайное число и не получил 41. –

+6

Так близко. 42 было бы лучше ... –

ответ

9

Вы должны дать другое семя, например:

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 
int main(void) 
{ 
    int a; 
    srand (time(NULL)); 
    a = rand(); 
    printf("%d",a); 
    return 0; 
} 
2

Вам необходимо сгенерировать генератор.

Ожидается. Причина заключается в повторяемости результатов. Допустим, что вы проводите некоторое тестирование с использованием случайной последовательности, и ваши тесты терпят неудачу после определенного количества времени или итераций. Если вы сохраните семя, вы можете повторить тест для дублирования/отладки. Семя с текущим временем от эпохи в миллисекундах, и вы получаете рандомы, как вы ожидаете (и сохраните семена, если считаете, что вам нужно повторять результаты).

+0

Когда я использую (скажем: 12) srand (12) до этого число меняется, но его неподвижная константа – Umut

+0

@ UmutŞenaltan: сеяние с тем же значением * будет * создавать ту же случайную последовательность. См. Https://en.wikipedia.org/wiki/Pseudorandom_number_generator –

+1

Ожидается. Причина заключается в повторяемости результатов. Допустим, что вы проводите некоторое тестирование с использованием случайной последовательности, и ваши тесты терпят неудачу после определенного количества времени или итераций. Если вы сохраните семя, вы можете повторить тест для дублирования/отладки. Семя с текущим временем от эпохи в миллисекундах, и вы получаете рандомы, как вы ожидаете (и сохраните семена, если считаете, что вам нужно повторять результаты). – Java42

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