Why do I always get the same sequence of random numbers with rand()?

前端 未结 12 2398
忘了有多久
忘了有多久 2020-11-21 06:06

This is the first time I\'m trying random numbers with C (I miss C#). Here is my code:

int i, j = 0;
for(i = 0; i <= 10; i++) {
    j = rand();
    printf         


        
相关标签:
12条回答
  • 2020-11-21 06:37

    rand() returns the next (pseudo) random number in a series. What's happening is you have the same series each time its run (default '1'). To seed a new series, you have to call srand() before you start calling rand().

    If you want something random every time, you might try:

    srand (time (0));
    
    0 讨论(0)
  • 2020-11-21 06:38

    None of you guys are answering his question.

    with this code i get the same sequance everytime the code but it generates random sequences if i add srand(/somevalue/) before the for loop . can someone explain why ?

    From what my professor has told me, it is used if you want to make sure your code is running properly and to see if there is something wrong or if you can change something.

    0 讨论(0)
  • 2020-11-21 06:42

    Rand does not get you a random number. It gives you the next number in a sequence generated by a pseudorandom number generator. To get a different sequence every time you start your program, you have to seed the algorithm by calling srand.

    A (very bad) way to do it is by passing it the current time:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int main() {
        srand(time(NULL));
        int i, j = 0;
        for(i = 0; i <= 10; i++) {
            j = rand();
            printf("j = %d\n", j);
        }
        return 0;
    }
    

    Why this is a bad way? Because a pseudorandom number generator is as good as its seed, and the seed must be unpredictable. That is why you may need a better source of entropy, like reading from /dev/urandom.

    0 讨论(0)
  • 2020-11-21 06:43

    To quote from man rand :

    The srand() function sets its argument as the seed for a new sequence of pseudo-random integers to be returned by rand(). These sequences are repeatable by calling srand() with the same seed value.

    If no seed value is provided, the rand() function is automatically seeded with a value of 1.

    So, with no seed value, rand() assumes the seed as 1 (every time in your case) and with the same seed value, rand() will produce the same sequence of numbers.

    0 讨论(0)
  • 2020-11-21 06:43

    This is from http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.13.html#rand:

    Declaration:

    void srand(unsigned int seed); 
    

    This function seeds the random number generator used by the function rand. Seeding srand with the same seed will cause rand to return the same sequence of pseudo-random numbers. If srand is not called, rand acts as if srand(1) has been called.

    0 讨论(0)
  • 2020-11-21 06:50

    call srand(sameSeed) before calling rand(). More details here.

    0 讨论(0)
提交回复
热议问题