Problème de rand () en programmation C?

Dupliquer possible:
Pourquoi ai-je toujours la même séquence de nombres aléatoires avec rand ()?

Alors oui, cela peut sembler un peu noble, mais comme je suis en train d’apprendre le C après être devenu raisonnable en Java, j’ai déjà eu quelques problèmes. J’essaie d’utiliser la fonction rand () en C, mais je ne peux l’appeler qu’une seule fois et, le cas échéant, elle génère TOUJOURS le même nombre aléatoire, qui est 41. J’utilise Microsoft Visual C ++ 2010 Express et Je l’ai déjà configuré pour qu’il comstack le code C, mais la seule chose qui ne fonctionne pas est cette fonction rand (). J’ai essayé d’inclure certaines bibliothèques généralement utilisées, mais rien ne fonctionne. Voici le code:

#include "stdafx.h" #include "stdio.h" #include "conio.h" #include "stdlib.h" int main(void) { printf("%d", rand()); //Always prints 41 return 0; } 

C’est parce que rand() initialise sa séquence pseudo-aléatoire toujours à partir du même point au début de l’exécution.

Vous devez entrer une graine vraiment aléatoire avant d’utiliser rand() pour obtenir des valeurs différentes. Cela peut être fait par la fonction srand qui décale la séquence en fonction de la graine transmise.

Essayez avec:

 srand(clock()); /* seconds since program start */ srand(time(NULL)); /* seconds since 1 Jan 1970 */ 

Vous devez ensemencer rand() .

srand ( time(NULL) ); est généralement utilisé pour initialiser une graine aléatoire. Autrement,

Vous avez besoin d’une graine avant d’appeler rand (). Essayez d’appeler ” srand (time (NULL))

Vous devez d’abord initialiser la graine aléatoire en utilisant srand ().

 #include "stdafx.h" #include "stdio.h" #include "conio.h" #include "stdlib.h" int main(void) { srand(time(NULL)); // Initialise the random seed. printf("%d", rand()); return 0; } 

rand() donne une valeur aléatoire, mais vous devez d’abord l’ensemencer. Le problème est que si vous exécutez votre code plusieurs fois (probablement), avec la même graine srand(time(NULL)) , alors rand() ; donnera toujours la même valeur.

Ensuite, la deuxième option consiste à exécuter, comme le dit Thiruvalluvar, srand(time(NULL)) , puis rand() .

Celui ci-dessus vous donnera 1000 nombres aléatoires. Essayez d’exécuter ce code et voyez ce qui se passe:

 srand (time(NULL)); for (int i=0; i<1000; i++) { printf ("Random number: %d\n", rand()); } 

J'espère que ça aide!