Problème de random : nombre pas aléatoire si...
Bonjour.
Voilà la situation : j'ai 6 fichiers, avec dedans des données. Je souhaite récupérer 5 données dans chacun des fichiers qui ont un nombre différents de données.
J'ai écrit une fonction randomNumbers qui me permet de me donner une liste de 5 chiffres aléatoires qui me servent à piocher dans mes fichiers.
Dans cette fonction, j'utilise bien srandom(time(NULL)) au début.
Le problème :
lorsque je fais appel plusieurs fois de suite à ma fonction randomNumbers, j'ai à chaque fois la même liste de nombre. Par contre, si je viens à mettre des points d'arrets entre chaque appel de ma fonction. J'ai l'impression que mon programme se déroule plus vite que le random() ne se réinitialise...
Voilà la situation : j'ai 6 fichiers, avec dedans des données. Je souhaite récupérer 5 données dans chacun des fichiers qui ont un nombre différents de données.
J'ai écrit une fonction randomNumbers qui me permet de me donner une liste de 5 chiffres aléatoires qui me servent à piocher dans mes fichiers.
Dans cette fonction, j'utilise bien srandom(time(NULL)) au début.
Le problème :
lorsque je fais appel plusieurs fois de suite à ma fonction randomNumbers, j'ai à chaque fois la même liste de nombre. Par contre, si je viens à mettre des points d'arrets entre chaque appel de ma fonction. J'ai l'impression que mon programme se déroule plus vite que le random() ne se réinitialise...
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
J'ai pas de souci, des valeurs différente à chaque fois.
En tout cas j'avais le même problème !
Utilise arc4random(), il n'y a même pas besoin de l'initialiser avec srand(time(NULL));
tu n'a qu'à faire directement arc4random() % INT_MAXIMUM et basta !
Ayé, j'ai compris pourquoi ce que vous faites ne marche pas.
La fonction rand() renvoie une suite de nombre pseudo aléatoire. C'est à dire que si vous appelez plusieurs fois la fonction, vous obtiendrez la même suite. L'intérêt est de pouvoir obtenir un fonctionnement reproductible d'un lancement à l'autre.
Pour obtenir une suite différente, on injecte une graine dans le générateur, avec la fonction srand(). Pour une même graine, on obtient la même suite. En général, on passe donc l'heure courante à srand() pour obtenir des suites différentes à chaque lancement.
Il faut donc appeler srand() une seule fois avec le paramètre time(NULL), autrement, tant que l'heure reste la même (ce qui est le cas, si c'est dans la même seconde), vous obtiendrez la même suite.