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;
    }
    

Anmelden zum Antworten