Heim > Backend-Entwicklung > C++ > Warum führt die wiederholte Verwendung von „srand()' in einer C-Funktion zu nicht zufälligen Ergebnissen?

Warum führt die wiederholte Verwendung von „srand()' in einer C-Funktion zu nicht zufälligen Ergebnissen?

Mary-Kate Olsen
Freigeben: 2024-12-30 08:49:09
Original
272 Leute haben es durchsucht

Why Does Repeatedly Using `srand()` in a C   Function Lead to Non-Random Results?

Verwenden von rand() zum Generieren wirklich zufälliger Werte innerhalb einer Funktion

In C verwenden Sie rand() zum Generieren von Zufallszahlen innerhalb einer Funktion Die Funktion kann zu wiederkehrenden Werten führen. Dieses Problem tritt auf, wenn srand() vor jedem Aufruf von rand() wiederholt aufgerufen wird.

Problem:

Betrachten Sie das von Ihnen bereitgestellte Beispiel:

string PullOne()
{
    string pick;
    string choices[3] = {"BAR", "7", "cherries"};

    std::srand(time(0));
    pick = choices[(std::rand() % 3)];
    return pick;
}
Nach dem Login kopieren

Wenn Sie PullOne() mehrmals aus main() heraus aufrufen, erwarten Sie unterschiedliche Zufallswerte für pull_1, pull_2 und pull_3. Sie erhalten jedoch durchweg identische Ergebnisse.

Lösung:

Um dieses Problem zu beheben, verschieben Sie den Aufruf von srand() außerhalb der PullOne()-Funktion und platzieren Sie ihn Geben Sie es einmal zu Beginn Ihres Programms ein. Dadurch initialisieren Sie den Zufallszahlengenerator einmal und stellen so sicher, dass für nachfolgende rand()-Aufrufe eine wirklich zufällige Sequenz erzeugt wird.

// srand() is now called only once, at program initialization.
int main()
{
    std::srand(time(0));

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

    return 0;
}
Nach dem Login kopieren

Erklärung:

srand () legt den Startwert für den Zufallszahlengenerator fest. Wenn derselbe Seed wiederholt verwendet wird, erzeugt der Generator dieselbe Sequenz. Durch die einmalige Initialisierung von srand() ist der Startwert im gesamten Programm konsistent, was zu einer vorhersehbaren und nicht zufälligen Ausgabe von rand() führt.

Daher ist es wichtig, srand() nur einmal aufzurufen, idealerweise während des Programms Initialisierung oder zu Beginn des Zufallszahlengenerierungsprozesses. Dies stellt die Generierung wirklich zufälliger Zahlen innerhalb Ihrer Funktion sicher.

Das obige ist der detaillierte Inhalt vonWarum führt die wiederholte Verwendung von „srand()' in einer C-Funktion zu nicht zufälligen Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage