Maison > développement back-end > C++ > Pourquoi ma fonction C rand() continue-t-elle de renvoyer la même valeur et comment puis-je la corriger à l'aide de srand() ?

Pourquoi ma fonction C rand() continue-t-elle de renvoyer la même valeur et comment puis-je la corriger à l'aide de srand() ?

Linda Hamilton
Libérer: 2024-12-19 20:47:26
original
949 Les gens l'ont consulté

Why Does My C   rand() Function Keep Returning the Same Value, and How Do I Fix It Using srand()?

Comportement de la fonction srand() dans une fonction

En travaillant avec la fonction rand() en C , un peut rencontrer un problème où appeler la fonction plusieurs fois dans la même fonction donne systématiquement la même valeur. Pour résoudre ce problème, il est essentiel de comprendre le comportement de la fonction srand().

Qu'est-ce que srand() et pourquoi est-ce important ?

La fonction srand() initialise le générateur de nombres aléatoires. Lors de l'appel répété de la fonction rand() sans la réinitialiser avec srand(), elle continue de produire des nombres suivants à partir de la même graine, ce qui entraîne des résultats prévisibles.

Solution pour corriger le caractère aléatoire

Pour garantir un véritable caractère aléatoire, le La fonction srand() ne doit être appelée qu'une seule fois au début du programme, plutôt que dans une fonction spécifique. Ce faisant, la graine n'est définie qu'une seule fois, permettant à la fonction rand() de générer une séquence véritablement aléatoire lors d'appels ultérieurs.

Application de la solution

Dans l'extrait de code fourni, le problème réside dans la fonction PullOne(). La fonction srand() est appelée avant chaque invocation de rand(), conduisant à une séquence prévisible et à des résultats répétés. Pour corriger cela, déplacez l'appel à srand() au début de la fonction principale :

int main() {
    std::srand(time(0));

    string pull_1, pull_2, pull_3;
    pull_1 = PullOne();
    pull_2 = PullOne();
    pull_3 = PullOne();

    return 0;
}
Copier après la connexion

En appliquant cette modification, la fonction rand() produira des valeurs distinctes pour pull_1, pull_2 et pull_3.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal