Setz das srand() aus der Funktion heraus.
Mit srand() setzt du den Startwert, womit rand() dann Rechnerisch eine "Zufallszahl"ausgibt. Als Startwert setzt du ja immer die aktuelle Uhrzeit.
Du rufst nun in deiner main Funktion 20 mal die Funktion zufall() auf. Jedoch wird der Startwert immer wieder gleich gesetzt. Die Zeitangabe ist nur sekundengenau. Und das ganze Programm, hat ja nichtmal eine Laufzeit von 1 Sekunde.
Von daher geht dein Programm folgende Schritte.
Es geht in die for Schliefe. Es wird zufall() aufgerufen. Dort wird der Startwert initialisiert mit srand() und mithilfe von rand() wird die nächste Zahl berechnet. Und bei dir zurück gegeben.
Danach wird "h" um eins erhöht und es wird wieder zufall() aufgerufen. Nun wird der Startwert aber wieder auf auf die Uhrzeit gesetzt. Da es aber nur Sekundengenau ist, hat sich an der Uhrzeit nichts geändert. Mit rand() wird dann wieder eine Berechnung ausgeführt. Da die Berechnung immer gleich ist, kommt auch hier wieder die selbe Zahl heraus.
Setz ganz einfach srand() vor deiner for Schleife in deiner main Funktion.
Aber verstehe nicht genau warum du für rand() eine extra Funktion bauen möchtest. Weil das letztendlich nur ein Einzeiler ist, und dafür eine Funktion eigentlich nur Rechenzeit verschwendung ist.
Code:
#include <iostream>
#include <time.h>
using namespace std;
int zufall()
{
return ((rand()%6)+1);
}
int main()
{
srand( time(NULL) );
for(int h=0; h<20; h++)
cout << "Zufallszahl: " << zufall() << endl;
}
oder besser schreibe es gleich so.
Code:
#include <iostream>
#include <time.h>
using namespace std;
int main()
{
srand( time(NULL) );
for(int h=0; h<20; h++)
cout << "Zufallszahl: " << (rand()%6)+1 << endl;
}