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; }
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; }
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!