Il te faut avant tout comprendre que l´implémentation standard de rand() est une valeur pseudo aléatoire.
Késako ? Des appels successifs à rand() vont produire une suite de valeurs qui ressembleront bien à des nombres tirés au sort. Cependant, c´est bel et bien une suite déterministe.
Pour avoir un peu plus d´aléas, il existe une fonction, srand() qui prend en paramètre une " graine" ( le s de srand est pour " seed") qui initialise cette liste pseudo-aléatoire. Si tu fais un srand(13245); avant l´appel à rand(), tu verras qu´il te produira un autre résultat que 41, mais là encore toujours le même.
La solution est d´initialiser la liste aléatoire avec... l´heure. En effet, tu génèreras ainsi une liste aléatoire différente à chaque lancement de ton programme, à condition d´avoir suffisament de précision.
Tu peux utiliser la fonction time() qui retourne le nombre de secondes écoulées depuis le premier Janvier 1970. Cela t´assurera une variable un peu plus " aléatoire", à condition de ne pas lancer plusieurs fois ton programme par seconde, auquel cas tu aurais même valeur de time(), donc même appel de srand(), donc même initialisation de rand() et même suite aléatoire générée.
Note, le paramètre de la fonction time() est un pointeur vers un endroit où stocker la valeur de retour. Il n´est pas nécessaire dans notre cas, vu que la fonction nous retourne déjà la valeur intéressante, et on l´appelle donc avec NULL.
- include < stdlib.h>
- include < time.h>
int main ( )
{
srand(time(NULL));
int variable=rand()%1000;
return variable;
}