Problème de random : nombre pas aléatoire si...

romaix21romaix21 Membre
16:26 modifié dans API UIKit #1
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...

Réponses

  • CéroceCéroce Membre, Modérateur
    16:26 modifié #2
    Fais voir ton code, pour l'instant nous ne pouvons pas t'aider.
  • GreensourceGreensource Membre
    16:26 modifié #3
    Ouais parce que moi en faisant la même chose:
    #include&lt;time.h&gt;<br /><br />void main(){<br />&nbsp; &nbsp; &nbsp; &nbsp; srand(time(NULL));<br />&nbsp; &nbsp; &nbsp; &nbsp; int i;<br />&nbsp; &nbsp; &nbsp; &nbsp; for(i=0;i&lt;5;i++){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; printf(&quot;random: %d&#092;n&quot;,rand()%10);<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />}<br />
    

    J'ai pas de souci, des valeurs différente à  chaque fois.
  • AliGatorAliGator Membre, Modérateur
    16:26 modifié #4
    Et sinon y'a d'autres façons de générer un nombre aléatoire, cf les API du SecurityFramework ou plus simplement lire dans /dev/random.
  • Nebuchad34Nebuchad34 Membre
    16:26 modifié #5
    si tu recherche un nombre aléatoire dans un laps de temps très court après le précédent, il te donnera le même (il doit se baser sur les secondes et pas les millisecondes ou centièmes de secondes)
    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 !
  • CéroceCéroce Membre, Modérateur
    16:26 modifié #6
    dans 1262124229:

    si tu recherche un nombre aléatoire dans un laps de temps très court après le précédent, il te donnera le même (il doit se baser sur les secondes et pas les millisecondes ou centièmes de secondes)


    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.
  • romaix21romaix21 Membre
    16:26 modifié #7
    Merci a vous tous. Finalement j'ai résolu mon problème. J'utilisais srandom, et maintenant avec srand ca fonctionne...
Connectez-vous ou Inscrivez-vous pour répondre.