Problème de random en C++ [Résolu]

Problème de random en C++ [Résolu] - C++ - Programmation

Marsh Posté le 27-02-2008 à 11:52:34    

Bonjour à tous ^^
 
Voilà, j'ai passé pas mal de temps à essayer de résoudre un problème de random. J'ai fait plusieurs recherches sur Google et sur divers forum, et je n'ai pas trouvé de solution à mon problème. J'espère que quelqu'un prendra un peu de temps pour voir ce qui cloche :)  
 
Alors voilà. Je souhaite tirer une lettre aléatoire entre a et z (soit entre 97 et 122) pour faire des mots aléatoires. J'ai testé plusieurs fois mon programme et j'ai remarqué que mon random ne prenait pas en compte les bornes, c'est-à-dire qu'il lui arrive de renvoyer par exemple 201 ou quelque chose qui n'est pas compris entre 97 et 122. J'ai donc essayé de faire une condition pour qu'il refasse un random si le nombre obtenu n'est pas compris entre 97 et 122. Mais là, lorsque j'exécute le programme, il charge mais il n'affiche rien à l'écran...
 
Le plus étrange dans tout ça, c'est que lorsque j'utilise cette fonction pour trouver un nombre compris entre 2 et 3, ça fonctionne parfaitement ! Et j'ai bien mis le srand(time(NULL)); avant l'appel de la fonction, donc il n'y a pas de problème de ce côté là...
 
Voilà le code de ma fonction :

Code :
  1. unsigned Random (unsigned A, unsigned B)
  2. {
  3.     for ( ; ; )
  4.     {
  5.         unsigned N = (A + (unsigned)((double)rand() / ((double)RAND_MAX + 1) * B));
  6.         if (N < 97 || N > 122) continue;
  7.         else return N;
  8.     }
  9. } // Random ()


Merci de votre attention  :jap:


Message édité par Bad Luck le 27-02-2008 à 12:43:09
Reply

Marsh Posté le 27-02-2008 à 11:52:34   

Reply

Marsh Posté le 27-02-2008 à 12:28:51    

rapido là, je pense que ta fonction renvoie un n entre A et A+B. teste avec  
 
unsigned N = (A + (unsigned)((double)rand() / ((double)RAND_MAX) * (B-A)));
 
edit : pas très chouette toutes ces divisions pour de l'int, vaudrait mieux utiliser le modulo genre
 
N=A+Rand()%(B-A)

Message cité 1 fois
Message édité par rengzehn le 27-02-2008 à 12:38:12
Reply

Marsh Posté le 27-02-2008 à 12:42:33    

rengzehn a écrit :

rapido là, je pense que ta fonction renvoie un n entre A et A+B. teste avec  
 
unsigned N = (A + (unsigned)((double)rand() / ((double)RAND_MAX) * (B-A)));
 
edit : pas très chouette toutes ces divisions pour de l'int, vaudrait mieux utiliser le modulo genre
 
N=A+Rand()%(B-A)


Wah c'est génial, j'ai testé, ça marche :D Merci beaucoup :jap: ça aura été rapide ^^
Problème résolu ^^

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed