Le rand !
spriatez
Messages postés
180
Date d'inscription
Statut
Membre
Dernière intervention
-
spriatez Messages postés 180 Date d'inscription Statut Membre Dernière intervention -
spriatez Messages postés 180 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Voilà. J'ai pour projet de faire un random entre 1 et 100.
J'ai alors trouvé https://forums.commentcamarche.net/forum/affich-68764-je-cherche-une-fonction-random-en-c-c dans le forum.
Ca fonctionne super. néanmoins, lorsqu'on iitialise, le chiffre augmente jusqu'à 100, sans redescendre.
En quelque sorte, je lance, je trouve 4,
relance : 7 (aleatoir biensure ! donc fonctionne.)
relance : 12
relance : 17
relance : 22
relance : 26
etc. Je souhaiterais que la variable redescende par moment .. au lieu de sans cesse augmenter ! :(
Je sais qu'il y a un problème de modulo et que c'est basé sur l'heure. Mais comment faire autrement ? :/
si je "-1" c'est pareil.
Voici mon code :
Voilà. J'ai pour projet de faire un random entre 1 et 100.
J'ai alors trouvé https://forums.commentcamarche.net/forum/affich-68764-je-cherche-une-fonction-random-en-c-c dans le forum.
Ca fonctionne super. néanmoins, lorsqu'on iitialise, le chiffre augmente jusqu'à 100, sans redescendre.
En quelque sorte, je lance, je trouve 4,
relance : 7 (aleatoir biensure ! donc fonctionne.)
relance : 12
relance : 17
relance : 22
relance : 26
etc. Je souhaiterais que la variable redescende par moment .. au lieu de sans cesse augmenter ! :(
Je sais qu'il y a un problème de modulo et que c'est basé sur l'heure. Mais comment faire autrement ? :/
si je "-1" c'est pareil.
Voici mon code :
int attaque_joueur; srand(time(NULL)); attaque_joueur = (rand() % 100) -1; // entre 1 et 100 le rand printf("%i", attaque_joueur); return 0;
2 réponses
euh perso, je vois que tu réinitialise le germe qui fait l'aléatoire a chaque fois que tu lance la fonction, et c'est pas top. mieux vaut faire ton srand(time(NULL)) dans ton main ! c'est probablement pour ca que ca a cet effet la !
Bonjour,
Effectivement, 2 problèmes.
srand(...) n'est à lancé qu'une fois. Donc, il faut mettre cette instruction dans une fonction d'initialisation comme le main() mais surtout pas dans la fonction de génération d'aléa.
Ensuite, l'utilisation du modulo induit des tirages biaisées sur les bits de poids faibles. Il vaut la règle de 3.
Sinon, si ton projet est la génération aléatoire d'un nombre entre 1 et 100, tu penses vraiment que tu peux utiliser cette fonction ???
Cdlt,
Effectivement, 2 problèmes.
srand(...) n'est à lancé qu'une fois. Donc, il faut mettre cette instruction dans une fonction d'initialisation comme le main() mais surtout pas dans la fonction de génération d'aléa.
Ensuite, l'utilisation du modulo induit des tirages biaisées sur les bits de poids faibles. Il vaut la règle de 3.
Sinon, si ton projet est la génération aléatoire d'un nombre entre 1 et 100, tu penses vraiment que tu peux utiliser cette fonction ???
Cdlt,
Mon code en entier :
Il est bien placé dans le main non ? :o le mettre au dessus de l'instruction unsigned short ?
Je ne sais trop comment faire autrement que par un rand ? :(
#include <stdio.h> #include <stdlib.h> #include <time.h> // A>b int main() { unsigned short int attaque_joueur; srand(time(NULL)); attaque_joueur = rand()%(170-80) +90; // printf("%hu", attaque_joueur); // Pour afficher et tester. return 0; }
Il est bien placé dans le main non ? :o le mettre au dessus de l'instruction unsigned short ?
Je ne sais trop comment faire autrement que par un rand ? :(
Ben dans ce cas, tu fais une boucle whille() et à chaque fois que tu appuies sur une touche, tu provoques un nouvel affichage.
Quoi qu'il en soit, si tu souhaites maintenir ta solution, il faudra soit attendre quelques secondes avant de relancer ton programme, ou alors d'utiliser autre chose que time(NULL) pour initialiser la graine.
Quoi qu'il en soit, si tu souhaites maintenir ta solution, il faudra soit attendre quelques secondes avant de relancer ton programme, ou alors d'utiliser autre chose que time(NULL) pour initialiser la graine.