Вы должны вызвать srand () перед вызовом rand для инициализации генератора случайных чисел.
Либо вызвать его с определенным начальным числом, и вы всегда получите одну и ту же псевдослучайную последовательность
#include <stdlib.h>
int main ()
{
srand ( 123 );
int random_number = rand();
return 0;
}
или вызовите его с изменяющимися источниками, то есть функцией времени
#include <stdlib.h>
#include <time.h>
int main ()
{
srand ( time(NULL) );
int random_number = rand();
return 0;
}
В ответ на комментарий Луны rand () генерирует случайное число с равной вероятностью от 0 до RAND_MAX(макрос, предопределенный в stdlib.h)
Затем вы можете сопоставить это значение с меньшим диапазоном, например
int random_value = rand(); //between 0 and RAND_MAX
//you can mod the result
int N = 33;
int rand_capped = random_value % N; //between 0 and 32
int S = 50;
int rand_range = rand_capped + S; //between 50 and 82
//you can convert it to a float
float unit_random = random_value / (float) RAND_MAX; //between 0 and 1 (floating point)
Это может быть достаточно для большинства применений, но его стоит указатьиз того, что в первом случае использование оператора mod вносит небольшое смещение, если N не делится равномерно на RAND_MAX + 1.
Генераторы случайных чисел интересны и сложны, широко распространено мнение, что генератор rand () встандартная библиотека C не является генератором случайных чисел отличного качества, читайте (http://en.wikipedia.org/wiki/Random_number_generation для определения качества).
http://en.wikipedia.org/wiki/Mersenne_twister (источник http://www.math.sci.hiroshima -u.ac.jp / ~ m-mat / MT / emt.html ) - это популярный высококачественный генератор случайных чисел.
Кроме того, я не знаю ни arc4rand (), ни random (), поэтому не могу комментировать.