0

output

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int randint(void);

int main(void) {
    for (int i = 0; i < 10; i++) {
        printf("%d ", randint());
    }

    return 0;
}

int randint(void) {
    srand((unsigned)time(NULL));

    return rand() % 81 + 10;
}

My intention is to print 10 different numbers. However, 10 duplicate numbers are printed continuously each time. How can I resolve this issue?

I used library functions like the srand() function. And I changed the position of the function little by little, but the result was the same.

Expected 84 40 35 60 45 84 40 77 37 11

Output 11 11 11 11 11 11 11 11 11 11

kongkong
  • 3
  • 1

2 Answers2

1

You have to initialize your the seed only once for all, not each time you need a random number otherwise, the same succession of numbers is generated and you always pick the first one.

I think your code shoud be :

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int randint(void);

int main(void) {
    srand((unsigned)time(NULL));

    for (int i = 0; i < 10; i++) {
        printf("%d ", randint());
     }

    return 0;
}

int randint(void) {
    return rand() % 81 + 10;
}
Julien
  • 2,747
  • 1
  • 12
  • 17
0

The call to the srand() routine ought to occur only once, in such a use case as yours at least, though in many cases that's the norm. For further reading you can refer to this question: How does calling srand more than once affect the quality of randomness?

By placing it within the routine, you're invoking it every time, thus constantly altering your seed, which in this case it but resets it, therefore producing identical values for each invocation.

To get rid of this unwanted behaviour you ought to place srand() within the main function, or at least at a location that's both prior to the call to rand(), and outside a loop, or other structure which will get invoked repeatedly, such as your function.

Here's a revised version of your code:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int randint(void);

int main(void) {
    srand((unsigned)time(NULL));

    for (int i = 0; i < 10; i++) {
        printf("%d ", randint());
    }

    return 0;
}

int randint(void) {
    return rand() % 81 + 10;
}