Sie säen innerhalb der Schleife (mit demselben Wert wegen der Geschwindigkeit, mit der die Schleife ausgeführt wird), wodurch die generierte Zufallszahl jedes Mal gleich ist.
Sie müssen Ihre Seed-Funktion außerhalb der Schleife verschieben:
%Vor%Sie müssen srand nur einmal am Anfang Ihres Programms aufrufen.
srand
initialisiert den Pseudozufallszahlengenerator mit der Zeit in Sekunden. Wenn Sie es mit einer bestimmten Nummer initialisieren, erhalten Sie immer die gleiche Zahlenfolge. Deshalb möchten Sie es normalerweise am Anfang mit der Zeit initialisieren (so dass der Startwert jedes Mal anders ist, wenn Sie das Programm ausführen) und dann nur rand
verwenden, um Zahlen zu erzeugen, die zufällig erscheinen.
In Ihrem Fall ändert sich die Zeit nicht von Iteration zu Iteration, da die Auflösung nur 1 Sekunde beträgt. Sie erhalten also immer die erste Zahl der Pseudozufallsfolge, die immer die gleiche ist.
Sie müssen srand((unsigned int)time(NULL))
nur einmal vor der Schleife eingeben.
Es ist durchaus möglich, dass die 3 mal 17 immer noch völlig zufällig sind.
Es besteht eine Wahrscheinlichkeit von etwa 1: 10, dass zwei Zahlen gleich sind, wenn Sie einen Bereich von 1-30 und drei Tipps verwenden. (Dies liegt an dem Geburtstagsproblem )
Nun, drei gleiche Ergebnisse zu erhalten, hat immer noch eine Wahrscheinlichkeit von 1 zu 900, wenn man denselben Bereich verwendet.
Vielleicht möchten Sie mehr Hintergrund auf der Analyseseite von random.org
lesenIch empfehle eher, den Systemaufruf gettimeofday () zu verwenden, um den Seed zu erhalten, der verwendet werden soll, um srand () zu füttern.
Etwas wie
%Vor%Dieser Ansatz kann zu mehr Entropie in Ihrem Pseudonummerngenerierungscode führen. IMHO natürlich
Ciao ciao
Tags und Links c