Heim >Backend-Entwicklung >C++ >Warum gibt meine rand()-Funktion innerhalb eines einzelnen Funktionsaufrufs identische Werte zurück?
Zufallsfunktion, die identische Werte innerhalb einer Funktion zurückgibt
Sie stoßen auf ein Problem, bei dem die Funktion rand() dieselben Werte generiert, wenn sie innerhalb einer Funktion aufgerufen wird Einzelfunktion. Um dieses Problem zu lösen, gehen wir tiefer in das Problem ein und erkunden die Lösung.
Das Problem verstehen
Die Funktion PullOne() nutzt die Funktion std::srand(time (0))-Funktion zum Initialisieren des Zufallszahlengenerators. Diese Initialisierung weist einen Startwert basierend auf der aktuellen Zeit zu. Durch den Aufruf von srand() innerhalb der Funktion setzen Sie den Zufallszahlengenerator jedoch bei jedem Aufruf der Funktion effektiv zurück. Dies führt dazu, dass die gleiche Folge von Zufallszahlen erzeugt wird.
Lösung
Um wirklich zufällige Werte in PullOne() zu generieren, sollten Sie den Zufallszahlengenerator nur einmal initialisieren , vor einem der Funktionsaufrufe. Dadurch wird sichergestellt, dass die Funktion bei jedem Aufruf eine eindeutige Folge von Zufallszahlen generiert.
Um dies zu erreichen, können Sie Ihren Code wie folgt ändern:
// 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; }
Indem Sie srand() initialisieren Außerhalb von PullOne() stellen Sie sicher, dass es nur einmal aufgerufen wird und der Zufallszahlengenerator ordnungsgemäß gesät wird. Diese Änderung stellt sicher, dass jeder Aufruf von PullOne() ein wirklich zufälliges Ergebnis erzeugt, wodurch pull_1, pull_2 und pull_3 unterschiedliche Werte ergeben.
Das obige ist der detaillierte Inhalt vonWarum gibt meine rand()-Funktion innerhalb eines einzelnen Funktionsaufrufs identische Werte zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!