Zufallszahlen... (MFC)
-
Dann solltest du die srand-Funktion vor deiner Funktion aufrufen.
-
Danke... - so scheint es nun zu funktionieren...
void CPasswordGeneratorView::OnButtonGenerate() { // Besorge Zeiger auf Dokumentenklasse CPasswordGeneratorDoc *pDoc = GetDocument(); int mode = m_nMode; int amount = m_wndSpin.GetPos(); // Anzahl Passwörter int length = m_wndSpin2.GetPos(); // Länge der Passwörter /** * Seed the random-number generator with current time so that * the numbers will be different every time we run. */ srand(time(NULL)); for (int i = 0; i < amount; i++) { // Erzeuge Password CString str = pDoc->GeneratePassword(mode, length); // Einfügen in die Liste m_wndList.InsertString(-1, str); } }
-
Guck mal hier:
srand((unsigned)time(NULL)); char feld[10 + 26 + 26]; char c; int i; for (c=48; c<58; c++) feld[c-48] = c; //Zahlen von 0 bis 9 for (c=65; c<91; c++) feld[c-65+10] = c; //Buchstaben von A bis Z for (c=97; c<123; c++)feld[c-97+36] = c; //Buchstaben von a bis z CString pw; for (i=0; i<laenge; i++) //laenge ist ne INT Variable halt wie lang das pass sein soll { int z = rand(); z = int(62 * (double(z) / RAND_MAX)); if (z<62) { CString temp; temp.Format("%c", feld[z]); pw += temp; int x = pw.GetLength(); } } m_passwort = pw; //m_passwort Ausgabe im Dialog oder sonst wo UpdateData(FALSE);
Nur mal so..
-
entweder 1, oder 2, oder aber 3, könnte aber auch 4 sein, aber nein, es ist 5, haha, doch nicht ,weil es 6 ist, ätsch war nur ein Bluff, weil 7 is es, naja, vielleicht doch 8 doer 9
So funzt der rand() % 9
-
Falsch.
-
Also ich Frage mich langsam ob manche hier noch an einer Antwort interesse haben. Ich habe eine Link gepostet (FAQ) in dem eine Funktionierende Funktion steht die eine Zufallszahl liefert und dann kommt die Frage "Warum bekomme ich immer die selbe Zahl ?"
-
Hallo Unix-Tom
Dein Beispiel Generiert bei Neustart des Programms immer die selbe Reienfolge der ZufallszahlenVerantwortlich ist der Befehl
srand(time(NULL));
NULL gibt den Startwert an und der ist immer gleichUm das zu umgehen hier eine bessere möglichkeit
time_t Zufall; srand((unsigned) time(&Zufall));
die Funktion:
int Zufall (int m_min,int m_max) { int zurueck_Zahl; do { zurueck_Zahl = rand(); }while(zurueck_Zahl < m_min || zurueck_Zahl > m_max); return zurueck_Zahl; }
Aufruf:
int m_Zahlsetzen = Zufall(1,6);
bitte nicht vergessen die Header time.h einzubinden
Vossy
-
Der kann nicht immer gleich sein weil time(NULL) die aktuelle Zeit zurückliefert.
Und die ist immer anderes . Außer die Funktion wird in der selben sekunde aufgerufen.
-
Original erstellt von Unix-Tom:
Der kann nicht immer gleich sein weil time(NULL) die aktuelle Zeit zurückliefert.
Und die ist immer anderes . Außer die Funktion wird in der selben sekunde aufgerufen.wohl eher selbe milisekunde
-
time(NULL) liefert nur die seit 1970 vergangenen sekunden zurück und nicht die millisek.
-
Danke Unix-Tom... - hab' deine Lösung (siehe Link) bereits verwendet... - funktioniert, wie Ich es erhofft hatte...
Nur nicht gleich "böse" werden...
Also Leute, lasst es mit diesem Thema endlich gut sein... - Ihr habt mir bereits tolle Lösungen angeboten...
Ciao,
-Jackler