In pratica la funzione rand (); consente di estrarre un numero pseudo casuale compreso tra 0 e RAND_MAX.
Ti faccio un esempio:
codice:
#include <stdio.h>
int main ( void ) {
int i , n;
for ( i = 0 ; i < 2 ; i++ ) {
n = rand ( );
printf( " %d \n " , n );
}
return ( 0 );
}
codice:
[michele@linux c]$ gcc -o r rand.c
[michele@linux c]$ ./r
1804289383
846930886
[michele@linux c]$ ./r
1804289383
846930886
Come vedi però la sequenza di numeri ottenuta è sempre la stessa, quindi occorre utilizzare la funzione srand ( unsigned int ); per dare luogo a numeri casuali sempre diversi.
Infatti se provi a mettere:
codice:
srand ( 13U );
srand ( 16U );
/* ecc.. */
vedi come ad ogni numero, cambia sempre la generazione dei numeri casuali.
Ad ogni numero corrisponde quindi una frequenza di numeri casuali sempre uguale per lo stesso numero.
Quindi per favere un valore imprevedibile devi utilizzare il clock di macchina:
quindi la funzione time (); che restituisce l'ora.
codice:
srand ( ( unsigned int ) time ( NULL ) );
Che quindi casta il valore restituito dalla time (); in un unsigned int e ti permette di avere sempre numeri diversi tra loro.