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

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

int main()

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

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

5 ответов


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

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

srand(time(NULL));

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


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

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

и

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

например

srand(time(NULL));

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

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

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


вот готовый исходный код для генератора случайных чисел, используя 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);
}

srand(time(NULL));

int nRandonNumber = rand()%((nMax+1)-nMin) + nMin;
printf("%d\n",nRandonNumber);