Heim >Backend-Entwicklung >C++ >Warum gibt meine rand()-Funktion innerhalb eines einzelnen Funktionsaufrufs identische Werte zurück?

Warum gibt meine rand()-Funktion innerhalb eines einzelnen Funktionsaufrufs identische Werte zurück?

Susan Sarandon
Susan SarandonOriginal
2024-12-25 11:37:071005Durchsuche

Why Does My rand() Function Return Identical Values Within a Single Function Call?

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!

Stellungnahme:
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