Генерировать случайное число от 1 до 10 в c

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

int main()

{
    int randomnumber;
    randomnumber = rand() % 10;
    printf("%d\n", randomnumber);
    return 0;
}

Это простая программа, где randomnumber - это неинициализированная переменная int, предназначенная для печати как случайное число от 1 до 10. Однако он всегда печатает один и тот же номер всякий раз, когда я запускаю снова и снова. Может кто-нибудь, пожалуйста, помогите и скажите мне, почему это происходит? Спасибо.

Ответ 1

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

Вы можете начать звонить в начале вашей программы:

srand(time(NULL));

Обратите внимание, что % 10 дает результат от 0 до 9, а не от 1 до 10: просто добавьте 1 в выражение %, чтобы получить 1 до 10.

Ответ 2

Вам нужно засеять генератор случайных чисел, от man 3 rand

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

и

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

например.

srand(time(NULL));

Ответ 3

Создание одного случайного числа в программе проблематично. Генераторы случайных чисел являются только "случайными" в том смысле, что повторяющиеся вызовы производят числа из заданного распределения вероятностей.

Посещение RNG не поможет, особенно если вы просто засеваете его из таймера низкого разрешения. Вы просто получите числа, которые являются хеш-функцией того времени, и если вы часто вызываете эту программу, они могут не часто меняться. Вы можете немного улучшить, используя srand(time(NULL) + getpid()) (_getpid() в Windows), но это все равно не будет случайным.

Единственный способ получить числа, которые являются случайными в нескольких вызовах программы, - это получить их извне программы. Это означает использование системной службы, такой как /dev/random (Linux) или CryptGenRandom() (Windows), или из службы, например random.org.

Ответ 4

Вот готовый запустить исходный код для генератора случайных чисел, используя c, взятый с этого сайта: http://www.random-number.com/random-number-c/ , Реализация здесь более общая (функция, которая получает 3 параметра: min, max и количество случайных чисел для генерации)

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

// the random function
void RandomNumberGenerator(const int nMin, const int nMax, const int  nNumOfNumsToGenerate)
{
  int nRandonNumber = 0;
  for (int i = 0; i < nNumOfNumsToGenerate; i++)
  {
    nRandonNumber = rand()%(nMax-nMin) + nMin;
    printf("%d ", nRandonNumber);
  }
  printf("\n");
}

void main()
{
  srand(time(NULL));
  RandomNumberGenerator(1,70,5);
}