rand () erzeugt die gleiche Zahl beim Kompilieren [duplizieren]

8

Ich habe gelernt, wie man die Funktion rand () benutzt, und ich habe ein kleines Ratespiel in C ++ geschrieben, aber das Problem ist, egal wie oft ich die Programme kompiliere, die generierte Nummer ist die gleiche - & gt; 41

%Vor%

Ich habe auch versucht, den Maximalwert von rand () zu ändern, und es hat sich geändert, solange ich es & lt; 41.

Irgendwelche Ideen? Ich habe keinen Hinweis , warum dies geschieht. Ich verwende CodeBlocks IDE und ich habe versucht, neu zu erstellen (STRG + F11)

    
Bugster 23.02.2012, 21:17
quelle

6 Antworten

11

Versuchen Sie,

hinzuzufügen %Vor%

am Anfang von main .

    
Adam S 23.02.2012 21:20
quelle
5

Sie sollten zuerst versuchen, einen Seed für die Funktion rand () wie folgt zu initialisieren:

%Vor%

am Anfang von main . Stellen Sie sicher, dass die time.h in der Kopfzeile enthalten ist

%Vor%

oder

%Vor%     
AntiClimacus 23.02.2012 21:22
quelle
2

Es wird wahrscheinlich jedes Mal der selbe Startwert für den Zufallszahlengenerator verwendet. Wenn Sie den Startwert des Zufallszahlengenerators jedes Mal auf einen anderen Wert setzen, werden Sie anders aussehen Zahlen. nach den Dokumenten:

  

Um Zufallszahlen zu erzeugen, wird srand normalerweise initialisiert   zu irgendeinem unterscheidbaren Wert, wie die mit der Ausführungszeit verbundenen.   Zum Beispiel der Wert, der von der Funktionszeit zurückgegeben wird (deklariert in   Header) ist jede Sekunde anders, was markant genug ist   für die meisten zufälligen Bedürfnisse.

    
Scott M. 23.02.2012 21:21
quelle
0

Sie müssen einen Seed an die Funktion rand () übergeben, die bei jeder Ausführung des Programms unterschiedlich ist (z. B. Zeitstempel). Im Allgemeinen ist es nicht möglich, echte Zufallszahlen zu erzeugen, aber Sie können einen Pseudozufall erhalten.

    
Madbreaks 23.02.2012 21:21
quelle
0

Der Zufallszahlengenerator wird bei jedem Programmlauf mit demselben Standardstatus versehen.

Um bei jedem Lauf unterschiedliche Ergebnisse zu erhalten, müssen Sie den Zufallszahlengenerator in Ihrem Programm einsetzen, indem Sie srand() aufrufen und einen neuen Seed übergeben. Es ist üblich, den Rückgabewert von time(NULL) als Startwert zu verwenden, da dies garantiert, dass Sie einen anderen Startwert für verschiedene Läufe Ihres Programms erhalten.

Fügen Sie am Anfang von main Folgendes hinzu:

%Vor%     
liwp 23.02.2012 21:25
quelle
0

Sie müssen die Rand-Funktion mit srand () am Anfang von main beginnen, typischerweise mit time (); Funktion

    
Beeblbrox 23.02.2012 21:22
quelle

Tags und Links