Maison >développement back-end >C++ >Pourquoi ma fonction rand() renvoie-t-elle des valeurs identiques dans un seul appel de fonction ?
Fonction aléatoire renvoyant des valeurs identiques dans une fonction
Vous rencontrez un problème où la fonction rand() génère les mêmes valeurs lorsqu'elle est appelée dans une fonction unique. Pour résoudre ce problème, approfondissons le problème et explorons la solution.
Comprendre le problème
La fonction PullOne() utilise le std::srand(time (0)) fonction pour initialiser le générateur de nombres aléatoires. Cette initialisation attribue une valeur de départ basée sur l'heure actuelle. Cependant, en appelant srand() dans la fonction, vous réinitialisez effectivement le générateur de nombres aléatoires à chaque fois que la fonction est appelée. Cela entraîne la production de la même séquence de nombres aléatoires.
Solution
Pour générer des valeurs véritablement aléatoires dans PullOne(), vous ne devez initialiser le générateur de nombres aléatoires qu'une seule fois. , avant tout appel de fonction. Cela garantit que la fonction génère une séquence unique de nombres aléatoires à chaque fois qu'elle est appelée.
Pour y parvenir, vous pouvez modifier votre code comme suit :
// Initializing the random number generator std::srand(time(0)); string PullOne() { string pick; string choices[3] = {"BAR", "7", "cherries"}; pick = choices[(std::rand() % 3)]; return pick; }
En initialisant srand() en dehors de PullOne(), vous vous assurez qu’il n’est appelé qu’une seule fois et que le générateur de nombres aléatoires est correctement amorcé. Cette modification garantit que chaque appel à PullOne() produit un résultat véritablement aléatoire, faisant de pull_1, pull_2 et pull_3 des valeurs distinctes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!