Langage c : les fonctions rand() et srand( )
Résolu
marven23
Messages postés
71
Date d'inscription
Statut
Membre
Dernière intervention
-
pacorabanix -
pacorabanix -
Salut,
je ss entrais de programmer un jeu en console avec devcpp
le but du code est d'initialiser la grille J->G[i][j] avec des caractères aléatoires '0',..,'6'
en premier lieu ca marche tres bien, mais j'ai remarqué ensuite que la même grille est générée pour toute exécution: toujours le '4' en (1,2) le '1' en (5,4) etc... et ce n'est plus intéressant d'avoir le même jeu chaque fois!
et même après l'insertion de "srand( time(NULL));" dans la boucle c'est encore pire car toute la grille se remplie avec des '5'...
voici le code de la fonctiion:
void initJeu(unJeu* J){
int i,j;
for (i=0;i<8;i++) for(j=0;j<8;j++){
//srand( time(NULL));
J->G[i][j] = (char)(1+(int)((float)rand()/32767*6)+'0');
}
return;
}
j'arrive plus à résoudre le prob :-(
aidez moi svp
je ss entrais de programmer un jeu en console avec devcpp
le but du code est d'initialiser la grille J->G[i][j] avec des caractères aléatoires '0',..,'6'
en premier lieu ca marche tres bien, mais j'ai remarqué ensuite que la même grille est générée pour toute exécution: toujours le '4' en (1,2) le '1' en (5,4) etc... et ce n'est plus intéressant d'avoir le même jeu chaque fois!
et même après l'insertion de "srand( time(NULL));" dans la boucle c'est encore pire car toute la grille se remplie avec des '5'...
voici le code de la fonctiion:
void initJeu(unJeu* J){
int i,j;
for (i=0;i<8;i++) for(j=0;j<8;j++){
//srand( time(NULL));
J->G[i][j] = (char)(1+(int)((float)rand()/32767*6)+'0');
}
return;
}
j'arrive plus à résoudre le prob :-(
aidez moi svp
A voir également:
- Langage c srand
- Langage ascii - Guide
- Langage binaire - Guide
- Pascal langage - Télécharger - Édition & Programmation
- Langage visual basic - Télécharger - Langages
- Langage basic gratuit - Télécharger - Édition & Programmation
4 réponses
Il faut mettre le srand(time(NULL)) avant la boucle for. Cette instruction n'est à appeler qu'une seule fois.
BONJOUR,
je débute en c et je voulais juste savoir, j'ai une fonction :tirage aléatoire
int rand_ab(int a, int b) {
int valeur;
srand (time(null));
valeur=rand( )%(b+1);
while (valeur < a) {
valeur= rand( )%(b+1);
return valeur;
}
veuillez me corriger si j'ai fais des erreurs, je ne comprend pas la fonction se qu'elle fait ? srand ?
merci d'avance
je débute en c et je voulais juste savoir, j'ai une fonction :tirage aléatoire
int rand_ab(int a, int b) {
int valeur;
srand (time(null));
valeur=rand( )%(b+1);
while (valeur < a) {
valeur= rand( )%(b+1);
return valeur;
}
veuillez me corriger si j'ai fais des erreurs, je ne comprend pas la fonction se qu'elle fait ? srand ?
merci d'avance
seed rand, srand, il faut seed rand(), seed = nourrir.
Ca permet, si c'est bien fait (http://www.metasploit.com/users/hdm/tools/debian-openssl/) de guarantir que random ne donnera pas deux fois le meme resultats.
tst@laptop # cat tst.c
int main()
{
srand(1);
printf("%d\n", rand());
}
tst@laptop # ./a.out
1804289383
tst@laptop # ./a.out
1804289383
tst@laptop # (pts/0) [~]
Voila l'interet, time() c'est bien, mais time() * getpid() c'est mieux si on doit executer le programme plusieures fois et plus rapidement (c'est moins previsible au moins, c'est le minimum syndical).
Ca permet, si c'est bien fait (http://www.metasploit.com/users/hdm/tools/debian-openssl/) de guarantir que random ne donnera pas deux fois le meme resultats.
tst@laptop # cat tst.c
int main()
{
srand(1);
printf("%d\n", rand());
}
tst@laptop # ./a.out
1804289383
tst@laptop # ./a.out
1804289383
tst@laptop # (pts/0) [~]
Voila l'interet, time() c'est bien, mais time() * getpid() c'est mieux si on doit executer le programme plusieures fois et plus rapidement (c'est moins previsible au moins, c'est le minimum syndical).