2010-11-01 6 views
2

je dois générer un nombre aléatoire à 4 chiffres en C++C++ Génération d'un 4 chiffres nombre aléatoire

J'ai utilisé le code suivant

#include<time.h> 

int number; 

number=rand()%1000; 
srand (time(NULL)); 

mais son ne donne pas un nombre aléatoire au total

+1

En complément de la réponse acceptée, il y a un très bel article en ce qui concerne l'utilisation correcte de rand() et srand () à http://eternallyconfuzzled.com/arts/jsw_art_rand.aspx. – manneorama

Répondre

16
number = rand() % 9000 + 1000; 

Il existe 9 000 numéros à quatre chiffres, n'est-ce pas? À partir de 1000 à 9999. rand() retournera un nombre aléatoire de 0 à RAND_MAX. rand() % 9000 sera de 0 à 8999 et rand() % 9000 + 1000; sera de 1000 à 9999. En général, lorsque vous voulez un nombre aléatoire de a à b Y compris la formule est

rand() % (b - a + 1) + a 

Notez également que srand() devrait être appelé une seule fois et avant toute rand().

Si vous faites prendre en compte les nombres compris entre 0 un 999 inclus pour être « numéro à quatre chiffres », il suffit d'utiliser rand() % 10000 dans ce cas. Je ne les considère pas, mais je couvre toutes les bases, juste au cas où.

HTH

+0

Je suis assez sûr que l'OP peut comprendre la première partie lui-même. Et d'ailleurs, le fait que 0045 ne soit pas un nombre à 4 chiffres est discutable. Le point important est d'appeler 'srand' en premier afin d'obtenir un" nombre aléatoire total ". – log0

+1

+1. Et pourrais-je aussi suggérer que, s'il y a même la plus légère possibilité que ce programme s'exécute plusieurs fois dans une boucle serrée, insère un 'sleep (1)' avant srand (time (0)) 'de sorte que les graines soient meilleures choisi. Cela permettra d'éviter l'inévitable "pourquoi mes séquences aléatoires ne sont-elles pas aléatoires?" questions :-) – paxdiablo

3

Rappelez-vous d'appeler srand une seule fois.

Jetez un oeil à Boost.Random, si vous n'aimez pas la distribution de rand.

// produces randomness out of thin air 
boost::mt19937 rng; 

// distribution that maps to 1000..9999 
boost::uniform_int<> fourdigits(1000,9999); 

// glues randomness with mapping 
boost::variate_generator<boost::mt19937&, boost::uniform_int<> > die(rng, fourdigits); 

// simulate rolling a die 
int x = die(); 
+3

Tuer un moineau avec une arme nucléaire, sommes-nous? :) Blague, j'aime booster, mais c'est peut-être trop pour l'op qui semble être un débutant –

+2

Bien que pour être juste, c'est standard en C++ 0x, donc devrait être une façon standard de distribuer des nombres. – GManNickG

+0

@GMan: Que ce soit standard ou pas, c'est trop compliqué pour un débutant. Ce que je veux dire c'est que nous l'aurons dans la norme, mais peut-être devrait-elle être réservée aux apprenants de niveau intermédiaire/avancé. –

2

Vous devez semer votre générateur aléatoire srandavant appeler rand()

#include<time.h> 

srand(time(NULL)); 
int number = rand() % 10000; // number between 0 and 9999 
Questions connexes