rand

Generates a pseudorandom number by using a well-known and fully-reproducible algorithm. A more programmatically secure version of this function is available; see rand_s. Numbers generated by rand are not cryptographically secure. For more cryptographically secure random number generation, use rand_s or the functions declared in the C++ Standard Library in <random>.

Syntax

``````int rand( void );
``````

Return Value

rand returns a pseudorandom number, as described above. There is no error return.

Remarks

The rand function returns a pseudorandom integer in the range 0 to RAND_MAX (32767). Use the srand function to seed the pseudorandom-number generator before calling rand.

The rand function generates a well-known sequence and is not appropriate for use as a cryptographic function. For more cryptographically secure random number generation, use rand_s or the functions declared in the C++ Standard Library in <random>. For information about what's wrong with rand and how <random> addresses these shortcomings, see this video entitled rand Considered Harmful.

By default, this function's global state is scoped to the application. To change this, see Global state in the CRT.

Requirements

rand <stdlib.h>

For additional compatibility information, see Compatibility.

Example

``````// crt_rand.c
// This program seeds the random-number generator
// with the time, then exercises the rand function.
//

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

void SimpleRandDemo( int n )
{
// Print n random numbers.
int i;
for( i = 0; i < n; i++ )
printf( "  %6d\n", rand() );
}

void RangedRandDemo( int range_min, int range_max, int n )
{
// Generate random numbers in the half-closed interval
// [range_min, range_max). In other words,
// range_min <= random number < range_max
int i;
for ( i = 0; i < n; i++ )
{
int u = (double)rand() / (RAND_MAX + 1) * (range_max - range_min)
+ range_min;
printf( "  %6d\n", u);
}
}

int main( void )
{
// Seed the random-number generator with the current time so that
// the numbers will be different every time we run.
srand( (unsigned)time( NULL ) );

SimpleRandDemo( 10 );
printf("\n");
RangedRandDemo( -100, 100, 10 );
}
``````
``````22036
18330
11651
27464
18093
3284
11785
14686
11447
11285

74
48
27
65
96
64
-5
-42
-55
66
``````