web-dev-qa-db-fra.com

Comment utiliser la fonction srand () avec time.h?

Mon programme contient du code qui devrait générer un nombre entier positif aléatoire chaque fois que je l'exécute. Il génère des nombres aléatoires mais une seule fois. Après cela, lorsque j'exécute le même code, cela me donne les mêmes valeurs, et cela rend mon code inutile.

J'ai commencé avec la fonction Rand, puis j'ai utilisé la fonction srand () avec le fichier d'en-tête time.h, mais ce n'est toujours pas le cas fonctionner correctement.

#define size 10
for(i=0;i<size;i++)
    Arr[i] = Rand()%size;

Premier appel (aléatoire):

6 0 2 0 6 7 5 5 8 6

Deuxième appel (aléatoire mais identique au précédent):

6 0 2 0 6 7 5 5 8 6

Plus tard, j'ai visité les questions sur Stack Overflow et j'ai lu sur la fonction srand (), et je l'ai utilisée comme:

#include<time.h>
for(i=0;i<size;i++)
    Arr[i] = srand(time(NULL));

Premier appel:

-10327 -10327 -10327 -10327 -10327 -10327 -10327 -10327 -10327 -10327

Deuxième appel:

-10326 -10326 -10326 -10326 -10326 -10326 -10326 -10326 -10326 -10326

Cela me donne des valeurs différentes (mais pas aléatoires). J'ai défini Arr [i] comme entier non signé, et je reçois toujours des valeurs négatives.

11
Đēēpak

Vous devez appeler srand()ne fois, pour randomiser la graine, puis appeler Rand() dans votre boucle:

#include <stdlib.h>
#include <time.h>

#define size 10

srand(time(NULL)); // randomize seed

for(i=0;i<size;i++)
    Arr[i] = Rand()%size;
37
Paul R

Essayez d'appeler randomize () avant Rand () pour initialiser le générateur aléatoire.

(regardez: srand () - pourquoi ne l'appeler qu'une seule fois? )

4
Ze..

Si vous avez choisi de srand, c'est une bonne idée d'appeler ensuite Rand() au moins une fois avant de l'utiliser, car c'est une sorte d'horrible générateur primitif aléatoire aléatoire. Voir la question Stack Overflow Pourquoi Rand ()% 7 renvoie-t-il toujours 0?.

srand(time(NULL));
Rand();
//Now use Rand()

Si disponible, random ou arc4Rand serait mieux.

1
Grady Player