rand avec une graine ne retourne pas au hasard si la fonction est bouclée

J’ai écrit ce code C ci-dessous, lorsque je boucle, il retourne un nombre aléatoire. Comment puis-je atteindre les 5 valeurs aléatoires différentes si myrand () est exécuté?

#include  #include  int myrand() { int ue_imsi; int seed = time(NULL); srand(seed); ue_imsi = rand(); return ue_imsi; } int main() { int value = 0; int i=0; for (i=0; i< 5; i++) { value =myrand(); printf("value is %d\n", value); } } 

L’ensemencement du générateur doit être effectué une fois (pour chaque séquence de nombres aléatoires que vous souhaitez générer, bien sûr!):

 #include  #include  int main() { int seed = time(NULL); srand(seed); int value = 0; int i=0; for (i=0; i< 5; i++) { value =rand(); printf("value is %d\n", value); } } 

Déplacez l’appel srand() dans main() , avant la boucle.

En d’autres termes, appelez srand() une fois, puis appelez rand() plusieurs resockets, sans autre appel à srand() :

 #include  #include  int main() { int value = 0; int i = 0; srand(time(NULL)); for (i = 0; i < 5; i++) { value = rand(); printf("value is %d\n", value); } } 

Le sharepoint départ () est de commencer la séquence de nombres aléatoires avec une valeur connue,
vous obtiendrez alors toujours la même séquence de nombres étant donné la même graine.

C’est pourquoi vous avez seed (), cela vous permet à la fois de générer la même séquence à tester, ou à partir d’une graine aléatoire (généralement l’heure) vous obtenez une séquence différente à chaque fois.

Essaye ça:

 #include  #include  int main(void) { for (int i = 0; i < 10; i++) { printf("%ld\n", (long)time(NULL)); } } 

Mon "devinette" est que 10 valeurs égales seront imprimées 🙂

Si vous voulez réensemencer (pour un caractère aléatoire supplémentaire ) chaque fois que vous appelez random() , voici l’une des façons de procéder:

 srandom( time(0)+clock()+random() ); 
  • time() jour une fois par seconde, mais sera différent chaque fois que vous exécuterez votre programme
  • clock() met à jour beaucoup plus souvent, mais commence à 0 chaque fois que vous exécutez votre programme
  • random() s’assure que vous (en général) ne remettez pas la même valeur deux fois de suite si votre boucle est plus rapide que la granularité de clock()

Bien sûr, vous pouvez faire plus si vous voulez vraiment, vraiment, du hasard – mais ceci est un début.