Zufallszahlen... (MFC)



  • 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 Zufallszahlen

    Verantwortlich ist der Befehl
    srand(time(NULL));
    NULL gibt den Startwert an und der ist immer gleich

    Um 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


Anmelden zum Antworten