Dato che il PC solitamente non ha un metodo per generare tutti i numeri casuali che potrebbero essere richiesti, si impiega un cosiddetto generatore di numeri casuali, che non è altro che un algoritmo che genera una successione di numeri apparentemente casuali ma che di fatto basa ogni numero estratto su quello che ha estratto prima. Per questo, per evitare di avere sempre la stessa successione di numeri casuali, si deve inizializzare il generatore di numeri casuali (tramite la funzione srand) con un valore che cambia ad ogni avvio del programma; a questo scopo, solitamente si usa la funzione time(NULL), che restituisce un timestamp (di fatto un valore che aumenta di 1 ogni secondo), che quindi dovrebbe essere differente ad ogni avvio del programma.
È sufficiente effettuare questa operazione una volta all'inizio del programma. Per ottenere numeri casuali, a questo punto, è sufficiente richiamare la funzione rand().codice:#include <time.h> #include <stdlib.h> /* ... */ /* Inizializza il generatore di numeri casuali */ srand(time(NULL));
La funzione rand() restituisce un numero casuale compreso tra 0 e un numero molto grande. Pertanto, se vuoi restringerla ad un certo range, solitamente si usa l'operatore modulo (%), che restituisce il resto della divisione tra il primo operando e il secondo. Ovviamente il modulo non può restituire un numero più grande del secondo operando, ed è per questo scopo che lo si usa.
In realtà il metodo del modulo non è ottimale per tutta una serie di ragioni che ho riassunto una volta in questo mio post, magari dacci un'occhiata (è in inglese, ma se ben ricordo con l'inglese tu non hai problemicodice:/* ottiene un intero casuale nel range [0, 9] */ int i=rand()%10;).

).
Rispondi quotando