The old school C way of generating random numbers is to call rand(). The rand() function, which is still part of C++, takes no arguments and produces a single, uniformly distributed integer in the [0, RAND_MAX] range. The internal state can be seeded by calling the library function, srand(seed_value).
The classic code to generate a random number in the [0, x) range hasn't changed since the 1980s, shown here:
#include <stdlib.h>
int randint0(int x) {
return rand() % x;
}
However, this code has several problems. The first and most obvious problem is that it doesn't generate all x outputs with equal likelihood. Suppose, for the sake of argument, rand() returns a uniformly distributed value in the [0, 32767] range, then randint0(10) will return each value in the [0, 7] range one-3276th more often than it returns either 8 or 9...