Frage: Tippspiel mit Zufallszahl - srand()



  • Hallo,
    ich versuche mir mithilfe eines C++ Buches das Programmieren mit C++ beizubringen.
    Und jetzt gerade bin ich am Beipiel ein Tippspiel zu schreiben.

    ⚠ Und nun zu meiner eigentlichen Frage:

    Wieso ist srand() nicht wirklich zufällig... also, jedesmal, wenn ich das Programm öffne habe ich immer die gleiche Zufallszahl (hier 52)?
    Dachte srand() würde mir bei jedem öffnen eine neue Zufallszahl ausgeben.
    So könnte ich ja auch einfach der Variablen Zufall den Wert 52 geben.

    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
    
        int Tipp;
        int Zufall;
        int ZufallsStart=4; //damit lege ich die Startzahl für srand() fest
        srand(ZufallsStart);
    
        Zufall=rand()%1000+1; //Zufallszahl von 1-1000
    
        do
        {
           cout<<"Bitte geben Sie Ihren Tipp ab: ";
           cin>>Tipp; 
    
           if(Tipp>Zufall)
           {  
              cout<<">Die getippte Zahl ist zu gross!"<<endl<<endl;
           }
           if(Tipp<Zufall)
           {
              cout<<">Die getippte Zahl ist zu klein!"<<endl<<endl;
           }
        }      
        while(Tipp!=Zufall);
    
        cout<<"Das war die richtige Zahl!"<<endl;
    
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    

    **
    MAL WAS ANDERES:**
    Ich habe auch zunächst versucht es mit einer while-Schleife zu lösen...
    Im Buch ist die Musterlösung jedoch mit do-Schleife... Ist meine Lösung dadurch falsch oder nicht gut?

    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        const int Startwert=100;
        long int Zufall;
        long int Tipp;
    
        srand(Startwert);
        Zufall=rand();
    
        while(Tipp!=Zufall)
        {
    
        cout<<endl<<Zufall<<endl<<"Geben Sie Ihren Tipp ab: ";
        cin>>Tipp;
    
            if(Tipp>Zufall)
            {
               cout<<">Ihre getippte Zahl ist groesser als das Ergebnis"<<endl;
            } 
            if(Tipp<Zufall)
            {
            cout<<">Ihre getippte Zahl ist kleiner als das Ergebnis"<<endl;
            } 
        }
    
        cout<<">Sie haben die richtige Zahl getippt!"<<endl<<endl;     
    
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    


  • srand(unsigned(time(NULL)));
    

    so wird es "zufälliger"



  • long int Zufall;
        long int Tipp;
    
        srand(Startwert);
        Zufall=rand();
    
        while(Tipp!=Zufall)
        {
    

    Hier wird Tipp nicht initialisiert. Was in "Tipp" steht ist dann zufällig, wenn es gleich "Zufall" ist, dann wird die Schleife nie betreten



  • @ Firefighter:
    Okay, habe das nun einmal eingesetzt, allerdings ist das ja im Grunde auch nicht wirklich zufällig... die Zahl steigt bei jedem (schnellen nacheinander) Öffnen um ungefähr 5-10.

    So kann man, wenn man zweimal hintereinander "spielt" ja "ungefähr" schon wissen, wo die Zahl liegt...

    💡 Gibt es auch eine Möglichkeit absolut zufällige Zahlen zu bilden?

    Also zum Beispiel: einmal hab ich 985 dann mal wieder nur 3, dann 17, 589, 654,12, 5 etc etc etc.....

    Aber danke für deine Antwort, hat schon sehr geholfen... dachte schon ich würde was flasch machen...

    @da:

    💡 Oh.. ja, das klingt irgendwie logisch, hätte ich auch selber drauf kommen können... fühl mich grad irgendwie n bisschen dumm... 😞



  • Vielleicht möchtest Du den Magazinartikel Zufälle gibt's?! lesen.

    greetz, Swordfish


Anmelden zum Antworten