Es wird immer die gleiche Randome zahl generiert
-
Das komische ist das die Randome zahl immer die gleiche Zahl generiert was jetzt?
#include <iostream> #include <string> #include <time.h> int main() { std::string alphabet = "abcdefghijklmnopqrstuvwxyz"; std::string fertigesPasswort = ""; int i = 0; while ( i < 20) { i++; srand(time(NULL)); int randome = rand() % 25 + 0; fertigesPasswort = alphabet[randome] + fertigesPasswort; std::cout << randome << std::endl; } std::cout << fertigesPasswort << std::endl; system("pause"); return 0; }
Ausgabe:
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 cccccccccccccccccccc Drücken Sie eine beliebige Taste . . .
-
srand
nur EINAMLIG aufrufen, NICHT innerhalb der Schleife.
Als Bonus folgendes Video schauen: https://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful
-
Guck die mal an, was srand macht und wo du es aufrufen solltest. Übrigens ist rand() nicht zu empfehlen, es gibt bessere und komfortablere Zufallsgeneratoren in C++., die stecken im Header <random>.
-
Habe es schon anders gelöst danke an die schnellen antworten
-
Zur Ergänzung: das funktioniert nicht, weil deine 20 Durchläufe weniger als 1 Sekunde benötigen und time() in Sekunden zählt.
Wenn du rand() verwenden willst, dann kannst du es mal so versuchen:
srand(time(NULL) * i);
Oder, besser, wie wob erwähnt hat außerhalb der Schleife verwenden.
-
Skylac06 schrieb:
Wenn du rand() verwenden willst, dann kannst du es mal so versuchen:
srand(time(NULL) * i);
*schüttel*
*lebendigImGrabUmdreh*
*brrr*
*igitt*Ich hoffe, das war nicht ernst gemeint!
-
Ursprünglich schon.
Aber ich muss einsehen, vielleicht doch keine perfekte Lösung.
-
statt des alten Graffies mit srand&Co sollte man lieber die random-Lib aus C++11 benutzen. Dein Code könnte dann so aussehen:
#include <random> // alles was der Zufall braucht #include <iostream> #include <string> int main() { using namespace std; string fertigesPasswort; const auto seed = random_device()(); // liefert einen 'zufälligen' Samen für den Zufallsgenerator // so generieren zwei Programmläufe unterschiedliche Zahlen auto rng = mt19937( seed ); // rng := Random-Number-Generator const auto a_bis_z = uniform_int_distribution< int >( 'a', 'z' ); // liefert nur Codes für die Zeichen 'a' bis 'z' for( int i=0; i<20; ++i ) fertigesPasswort += char( a_bis_z( rng ) ); cout << "Dein Passwort: " << fertigesPasswort << endl; cin.get(); // Pause return 0; }