2013-05-15 5 views
7

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 seulement une fois. Après cela, quand j'exécute le même code, cela me donne les mêmes valeurs, et cela rend mon code inutile.Comment utiliser la fonction srand() avec time.h?

J'ai commencé avec la fonction rand , puis je l'srand() fonction avec le fichier d'en-tête time.h, mais il ne fonctionne pas correctement.

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

premier appel (au hasard):

6 0 2 0 6 7 5 5 8 6 

Deuxième appel (au hasard, mais même que précédemment):

6 0 2 0 6 7 5 5 8 6 

Plus tard je me suis rendu des questions Stack Overflow et j'ai lu la fonction srand(), et je l'ai utilisé 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 

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

+1

Avez-vous mis votre semence? Réglez votre graine avec la fonction de temps. – Magn3s1um

+4

Vous n'avez besoin d'appeler 'srand' qu'une fois pour amorcer le générateur' rand'. Ne pas appeler 'srand' à chaque fois pour obtenir vos numéros – TJD

+3

Vous devriez probablement lire la [page de manuel] (http://linux.die.net/man/3/rand), qui explique comment ces fonctions fonctionnent, et fournit un exemple de travail. – Aya

Répondre

31

Vous devez appeler srand()une fois, randomiser la graine, puis appelez 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; 
+0

srand() prend un int non signé en entrée, donc time (NULL) devrait être refondu. – Jiminion

3

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

(voir à: srand() — why call it only once?)

+0

S'il vous plaît écrivez-moi le code, il serait vraiment utile si vous le mettez –

+0

'randomize 'n'est pas une fonction standard - peut-être que vous voulez dire' srand'? –

+0

Paul R, oui, je veux dire srand() de la "stdlib.h". Merci d'avoir ajouté un commentaire. Mon erreur. –

1

Si vous avez choisi de srand, il est une bonne idée de puis appeler rand() au moins une fois avant de l'utiliser, car il est une sorte de générateur pseudo-aléatoire horribles primitive. Voir la question sur le dépassement de pile Why does rand() % 7 always return 0?.

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

Si elle est disponible, que ce soit random ou arc4rand serait mieux.

-1
#include"stdio.h" 
#include"conio.h" 
#include"time.h" 

void main() 
{ 
    time_t t; 
    int i; 
    srand(time(&t)); 

    for(i=1;i<=10;i++) 
    printf("%c\t",rand()%10); 
    getch(); 
} 
-2
#include"stdio.h"//rmv coding for randam number access 

#include"conio.h" 

#include"time.h" 

void main() 
{ 
    time_t t; 
    int rmvivek; 

    srand(time(&t)); 
    rmvivek=1; 

    while(rmvivek<=5) 
    { 
     printf("%c\t",rand()%10); 
     rmvivek++; 
    } 
    getch(); 
} 
+0

cette méthode cryptage et décryptage progamming utilisé sous-partie –

Questions connexes