2016-07-12 14 views
0

Ich habe diesen Code ein:aufeinanderfolgenden Zufallszahlen in einem Bereich

#include <iostream> 
#include <cstdlib> 
#include <ctime> 

int getRandomNumber(int min,int max) 
{ 
    static const double fraction = 1.0/(static_cast<double>(RAND_MAX)+1.0); 
    return static_cast<int>(rand()*fraction*(max-min+1)+min); 
} 

int main() 
{ 
    srand(static_cast<int>(time(0))); 
    std::cout<<getRandomNumber(1,6); 
    return 0; 
} 

Wenn ich dieses Programm in succesions laufen, dann bekomme ich die gleiche Nummer. Aber wenn ich dieses mit Cout-Anweisung wie ausführen:

Ich bekomme jedes Mal andere Nummern. Also wie ist das möglich ?? Fehle ich etwas?

+0

Ich führe das obige Programm mit zwei cout. Es gibt die zwei gleiche Zahl als Ergebnis. – denis

+0

Ich sehe dich mit einer int-Nummer. Es kann nur mit rand() erzeugt werden. Warum machst du viel Ärger? 'cout << rand() << "" << rand();' – denis

+0

Übrigens; getRandomNumber() kann höchstens RAND_MAX + 1 verschiedene Zahlen erzeugen, unabhängig von min und max. Und es ist relativ einfach, die Zahlen vorherzusagen, die nicht zurückgegeben werden können. – Loreto

Antwort

2

time() Die Funktion gibt Zeit in Sekunden lang so dass das Programm zwei oder mehr Male innerhalb der gleichen Sekunde ausgeführt werden das Zufallszahl-System veranlassen, mit genau der gleichen Anzahl ausgesät werden.

+0

Die Funktion time() wird in der ersten srand-Funktion verwendet; wird nie benutzt und hat daher keine Beziehung zu dem, was wir als Ausgabe sehen. – denis

+2

@denis im Gegenteil. Die Funktion 'time()' wird im Aufruf von 'srand()' verwendet und bestimmt die Reihenfolge der Zufallszahlen, die von der Funktion 'rand()' erzeugt werden. Wenn Sie 'srand()' mit der gleichen Nummer aufrufen, erhalten Sie genau die gleiche Folge von Zufallszahlen aus der 'rand()' -Funktion. – Galik

+0

Leute, ich benutze Codeblocks. Immer wenn ich einen einzigen Aufruf von getRandomNumber() verwende, erhalte ich die gleiche Nummer, wie 5, aber wenn ich sie zweimal anrufe, erzeugt sie bei jeder Ausführung zwei Zufallszahlen, wie 56 oder 42. – DragneelFPS

0

Wenn die Funktion time() als Startwert und laufendes Programm innerhalb eines kurzen Intervalls verwendet wird, wird das erste Ergebnis von rand() in einer sehr kleinen Zahl verglichen mit RAND_MAX geändert.

Dies erklärt, warum Sie die gleiche Anzahl bekam, wenn Fraktion mit einer Zahl zu erhalten, von 1 - 6.

Hier ist eine andere Art und Weise Zufallszahl von 1 bis 6 erhalten, die es besser machen kann.

rand() % 6 + 1 
+0

Dieser sieht ziemlich ordentlich aus. Vielen Dank. – DragneelFPS

Verwandte Themen