51 votes

Pourquoi rand() donne-t-il la même séquence de nombres à chaque exécution ?

Chaque fois que j'exécute un programme avec rand() cela me donne les mêmes résultats.

Exemple:

 #include <iostream>
#include <cstdlib>

using namespace std;

int random (int low, int high) {
    if (low > high)
        return high;
    return low + (rand() % (high - low + 1));
}

int main (int argc, char* argv []) {
    for (int i = 0; i < 5; i++)
        cout << random (2, 5) << endl;
}

Sortir:

 3
5
4
2
3

Chaque fois que j'exécute le programme, il affiche les mêmes nombres à chaque fois. Y a-t-il un moyen de contourner ceci?

1voto

Michael Kohne Points 8233

Vous devez amorcer le générateur de nombres aléatoires (voir la fonction 'srand'). En supposant que vous ne fassiez pas de cryptographie, alors l'ensemencer avec la sortie de « temps » est probablement suffisant.

0voto

John3136 Points 12125

Vous obtenez en fait des nombres pseudo-aléatoires. Pour les rendre "plus aléatoires", vous pouvez amorcer le générateur de nombres aléatoires en utilisant quelque chose qui "change" (le plus souvent l'heure actuelle).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X