2017-12-17 9 views
-1

Ich habe eine Klassenfunktion int ComputerClass::getGuess(), die jedes Mal, wenn es aufgerufen wird, eine randomisierte Zahl erzeugen sollte. In meiner Hauptfunktion erstellt I 2 Funktionen der Klasse ComputerClass Computer1,Computer2 und die Klasse-Funktion aufgerufen, aber es ist die gleiche Anzahl für jeden Anruf zurückgibt:Randomizing der Startwert C++

cout << Computer1.getGuess()<<endl; 
cout << Computer2.getGuess()<<endl; 

Unten ist die Elementfunktion

int ComputerClass::getGuess() 
{ 
    //Generate randomn number 
    srand(time(NULL)); 
    generatednumber = rand() % 100 + 1; 

    //return computers randomly generated # 
    cout <<"--(Computer)Please enter a guess between 1-100: "<< 
    generatednumber<<endl; 

    return generatednumber; 
} 

I‘ Ich nehme an, mein Problem ist der Startwert, aber ich weiß nicht, wie ich es einrichten soll, so dass die Zahl bei jedem Aufruf zufällig wird.

+0

Rufen Sie 'srand' einmal am Anfang Ihres Programms auf. Jedes Mal, wenn Sie es mit der gleichen Nummer anrufen, ist der nächste Wert gleich. –

+0

Richten Sie es so ein, dass 'srand()' nur einmal im gesamten Programm aufgerufen wird, nicht jedes Mal, wenn 'getGuess()' aufgerufen wird (was dazu führt, dass zwei zusammenkommende Aufrufe den gleichen Wert seit der Auflösung liefern) von 'time()' ist schlecht). Und suchen Sie nach besseren Alternativen zum Erzeugen von Zufallswerten, in C++ 11 und später, – Peter

Antwort

0

Sie sollten srand nur einmal für das gesamte Programm aufrufen. Wenn Sie die Zeit (NULL) zweimal sehr schnell aufrufen, wird normalerweise derselbe Wert zurückgegeben, da die Zeit langsamer als die der CPU ist.

Nachdem Sie srand aufgerufen haben, gibt jeder nachfolgende Aufruf von rand einen anderen Wert zurück.

Verwandte Themen