Zufallsgenerator gibt immer das gleiche aus
-
Hallo Com

Hier den Code dazu:
Das ist meine Klasse dice, vereinfacht:Dice::Dice() { std::default_random_engine seeder; std::uniform_int_distribution< unsigned int > roll( 1, 6 ); for ( unsigned int i = 0; i != 5; ++i ) rolls_.push_back( roll(seeder) ); } void Dice::show() { for( unsigned int i = 0; i < rolls_.size(); ++i ) std::cout << rolls_[i] << '\n'; }und das die main:
int main() { Dice dice_1; dice_1.show(); Dice dice_2; dice_2.show(); std::cin.get(); }Wenn ich das ganze kompiliere, kommt für dice_1 und 2 das gleiche raus. Egal wie oft ich kompiliere, es kommt immer 31356 raus.
Wie kann ich das ändern?
Vielen dank im Voraus und nochn schönen Sonntag
-
mit der aktuellen Zeit als seed initialisieren wäre ein Anfang.
-
Der Seeder sollte einen Parameter übergeben bekommen, z.B. die aktuelle Zeit. Außerdem solltest du ihn nur einmalig am Programmanfang initialisieren.
-
Der Trick mit der aktuellen Zeit dient dazu, dass der Zufallsgenerator bei jedem* Programmstart andere Werte erzeugt.
*sofern er nicht in der selben Sekunde ist.
-
Vielen Dank für den Denkanstoß. Das mit der Zeit wusste ich nicht. Hab das so gelöst wie auf C++ Reference:
unsigned int tic = std::chrono::system_clock::now().time_since_epoch().count(); std::default_random_engine seeder( tic );