Ich erstellte ein einfaches Programm, das einen Münzwurf für meine Klasse simuliert. (Eigentlich ist Klasse über diesen Begriff und ich arbeite gerade durch den Rest der Projekte, die nicht benötigt wurden). Es beinhaltet das Erzeugen und Aufrufen einer Funktion, die eine Zufallszahl zwischen 1 und 2 erzeugt. Ursprünglich habe ich versucht, den Zufallszahlengenerator innerhalb der Funktion zu setzen, die ihn verwenden würde (coinToss); Es hat jedoch keine Zufallszahl erzeugt. Jedes Mal wenn das Programm ausgeführt wurde, war es die gleiche Zahl, als ob ich nurC++: Zufallszahlengenerator außerhalb von main()
rand()
statt
unsigned seed = time(0);
srand(seed);
rand();
Doch benutzt hatte, wenn ich die oben bewegt innerhalb
int main()
es hat gut funktioniert.
Meine Frage ist 1), warum hat es nicht funktioniert, wenn Setup in der Funktion, die sie aufgerufen und (2) wie funktioniert rand()
hat Zugang zu dem, was von srand()
getan wurde, wenn sie beide nicht in der gleichen Funktion auftreten? Offensichtlich bin ich ein Anfänger also bitte vergib mir, wenn ich die Frage nicht richtig formulierte. Auch hat mein Buch nur kurz auf rand()
und srand()
berührt, das ist alles, was ich wirklich weiß.
danke für jede Hilfe!
Einschlägige Code:
Erster Versuch, das hat nicht funktioniert:
int main()
{
//...........
coinToss();
//...........
}
int coinToss()
{
unsigned seed = time(0);
srand(seed);
return 1 + rand() % 2;
}
Zweiter Versuch, die Arbeit haben:
int main()
{
unsigned seed = time(0);
srand(seed);
coinToss();
}
int coinToss()
{
return 1 + rand() % 2;
}
Indem Sie% 2 tun, überprüfen Sie wirklich nur die Zufälligkeit von Bit 0 der Zahl (die im rand() Fall als nicht zufällig gezeigt wurde). Ich habe einmal (auf SO) eine ganzzahlige Division vorgeschlagen. dh rand()/(RAND_MAX/2) aber jemand wies darauf hin, dass nur Bit 31 der Nummer überprüft wurde. –