функция random или rand печатает одно и то же значение даже на разных машинах - PullRequest
3 голосов
/ 27 апреля 2011

Я хочу напечатать случайное число в диапазоне от 1 до 6. У меня есть следующий код.

printf("The random value is %d \n",random(6));

Он печатает 1804289383 каждый раз, когда я запускаю код.Даже на разных машинах.Я также пробовал rand (6), но вывод такой же.Даже я убрал 6, выход не меняется.Подскажите пожалуйста как это исправить

Заранее спасибо

Sanket

Ответы [ 3 ]

5 голосов
/ 27 апреля 2011

Вы должны иметь srand() перед rand(), чтобы каждый раз генерировать новые числа. Этот код покажет, как это сделать:

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

int main()
{
    srand(time(0));
    printf("The random value is %d\n", 1 + rand() % 6);
    return 0;
}
2 голосов
/ 27 апреля 2011

Во-первых, random() не принимает никаких аргументов.

Во-вторых, из тонкого руководства :

Как rand () , random () по умолчанию создает последовательность чисел, которые могут быть продублированы путем вызова srandom () с 1 в качестве начального числа.

Таким образом, если вы явно не укажете начальное число при вызове srandom(), random() будет каждый раз выдавать одну и ту же последовательность значений.

В-третьих, random() возвращает long, поэтому вам следует использовать%ld в вашем printf() вызове.

В-четвертых, узнайте о флагах предупреждений вашего компилятора, включите их все и обратите внимание на их вывод.Вы можете отключить некоторые флаги предупреждения, как только поймете, почему это безопасно.

1 голос
/ 27 апреля 2011

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

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

Итак, вот небольшой пример:

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

#define RSEED 2

int main (int argc, char *argv[]) {
  srand(RSEED);
  printf("The random value is %d\n", rand());
  return 0;
}
...