генерировать случайное число от 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);
}