Kurze Frage zu rand() und srand()



  • Hallo,

    ich habe eine kleine Frage zu srand und rand.

    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    
    int zufall()
    
    {
        srand(time(NULL)); // Wenn srand jetzt in der main-fkt steht werden immer
        return (1+ rand()%21);  // verschiedene Werte ausgegeben
    }
    
    int main()
    
    {
        int b=1;
        //srand(time(NULL))
        while (b<=6)
        {
              printf(" Wuerfel %d ergibt: %d\n",b,zufall());
              b++;
        }
    
              printf("\n\nende\n\n");
    
    return 0;          
              }
    

    Das Problem ist jetzt, wenn ich srand(time(NULL)) in die main-fkt schreibe wie im Kommentar angegeben, krieg ich immer verschiedene Zahlenfolgen, wenns in der Funktion Zufall steht gleiche. Ich hatte gedacht, wenn srand in der main-fkt steht wird ja nur einmal rand initialisiert und somit müsste ich immer gleiche werte kriegen, und wenns in zufall steht verschiedene (wobei mein programm wahrscheinlich aber zu schnell ausgeführt wird, dass ich sowieso gleiche zahlen kriege da die Zeit sich nicht schnell genug ändert...) Ich weiß, dass rand an sich so initialisiert mist ist, aber diese Tatsache verwirrt mich grade 😉

    Vielen Dank im voraus!



  • srand() wird einmal ausgeführt. Damit initialisierst du die Zufallsreihenfolge (mit dem Seed-Wert).



  • 'man srand' schrieb:

    The srand() function uses the argument as a seed for a new sequence of
    pseudo-random numbers to be returned by subsequent calls to rand(). If
    srand() is then called with the same seed value, the sequence of
    pseudo-random numbers shall be repeated.



  • aber wieso krieg ich dann mit

    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    
    int zufall()
    
    {
        return (1+ rand()%21); 
    }
    
    int main()
    
    {
        int b=1;
        srand(time(NULL))
        while (b<=6)
        {
              printf(" Wuerfel %d ergibt: %d\n",b,zufall());
              b++;
        }
    
              printf("\n\nende\n\n");
    
    return 0;          
              }
    

    immer andere werte? srand ist nur EINMAL aufgerufen, sprich initialisiert rand EINMAL. Somit müsste rand immer mit dem gleichen wert anfangen, ich kriege aber immer einen anderen...



  • Du initialisierst ja mit time(NULL) und dieser Wert ändert sich ja sekündlich. Würdest du mit 0 oder 4431 initialisieren, würdest du immer die jeweilige Sequenz bekommen.



  • chmbw schrieb:

    srand ist nur EINMAL aufgerufen, sprich initialisiert rand EINMAL. Somit müsste rand immer mit dem gleichen wert anfangen, ich kriege aber immer einen anderen...

    Nein, gerade umgekehrt. rand() "merkt" sich die letzten Zahlen und generiert daraus wieder neue Zahlen. Die erste Zahl nach der Initialisierung ist logischerweise die initialisierte Zahl (glaube ich). Initialisierst du jedenfalls jedes Mal mit der gleichen Zahl, es kommt aber auch immer die gleiche Startzahl raus.



  • srand sollte nur ein Mal beim Programmstart aufgerufen werden.

    Denn srand initialisiert den Zufallsgenerator. Rufst du srand(time(NULL)) also in einer Schleife erneut auf, so wird der Zufallsgenerator ständig neu initialisiert. Der Wert ist aber in der kurzen Zeit der gleiche.


Anmelden zum Antworten