13

My program contains code that should generate a random positive integer number every time I execute it. It generates random numbers but only once. After that, when I execute same code, it gives me same values, and it is making my code useless.

I started with the rand function, and then I used the srand() function with the time.h header file, but still it is not working properly.

#define size 10
for(i=0;i<size;i++)
    Arr[i] = rand()%size;

First call (random):

6 0 2 0 6 7 5 5 8 6

Second call (random but same as previous):

6 0 2 0 6 7 5 5 8 6

Later I visited Stack Overflow questions and I read about the srand() function, and I used it as:

#include<time.h>
for(i=0;i<size;i++)
    Arr[i] = srand(time(NULL));

First call:

-10327 -10327 -10327 -10327 -10327 -10327 -10327 -10327 -10327 -10327

Second call:

-10326 -10326 -10326 -10326 -10326 -10326 -10326 -10326 -10326 -10326

It is giving me different (but not random values). I've defined Arr[i] as unsigned int, and still I am getting negative values.

  • 1
    did you set your seed? Set your seed with the time function. – KrisSodroski May 15 '13 at 15:33
  • 4
    You only need to call `srand` once to seed the `rand` generator. Don't call `srand` each time to get your numbers – TJD May 15 '13 at 15:36
  • 3
    You probably ought to read the [manpage](http://linux.die.net/man/3/rand), which explains how these functions work, and provides a working example. – Aya May 15 '13 at 15:38
  • @Magn3s1um I don't know what you are talking about –  May 15 '13 at 15:41
  • 2
    You set your seed with the current time: srand(time(null)). Then you call rand. That way you get a unique seed every single time. The seed changes the random algorithm. Do you understand now? – KrisSodroski May 15 '13 at 15:44
  • is there any specific reason for using srand(), if not may be you can follow [**How to use /dev/random or urandom in C? stackoverflow** ](http://stackoverflow.com/questions/2572366/how-to-use-dev-random-or-urandom-in-c) – asio_guy May 15 '13 at 16:08
  • @Magn3s1um: Clear and concise explanation :) – crisron Apr 06 '16 at 16:54

5 Answers5

46

You need to call srand() once, to randomize the seed, and then call rand() in your loop:

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

#define size 10

srand(time(NULL)); // randomize seed

for(i=0;i<size;i++)
    Arr[i] = rand()%size;
Paul R
  • 208,748
  • 37
  • 389
  • 560
4

Try to call randomize() before rand() to initialize random generator.

(look at: srand() — why call it only once?)

Community
  • 1
  • 1
Ze..
  • 163
  • 1
  • 10
3

If you chose to srand, it is a good idea to then call rand() at least once before you use it, because it is a kind of horrible primitive psuedo-random generator. See Stack Overflow question Why does rand() % 7 always return 0?.

srand(time(NULL));
rand();
//Now use rand()

If available, either random or arc4rand would be better.

Community
  • 1
  • 1
Grady Player
  • 14,399
  • 2
  • 48
  • 76
-2
#include"stdio.h"
#include"conio.h"
#include"time.h"

void main()
{
  time_t t;
  int i;
  srand(time(&t));

  for(i=1;i<=10;i++)
    printf("%c\t",rand()%10);
  getch();
}
mikdiet
  • 9,859
  • 8
  • 59
  • 68
-2
#include"stdio.h"//rmv coding for randam number access

#include"conio.h"

#include"time.h"

void main()
{
    time_t t;
    int rmvivek;

    srand(time(&t));
    rmvivek=1;

    while(rmvivek<=5)
    {
        printf("%c\t",rand()%10);
        rmvivek++;
    }
    getch();
}
aghast
  • 14,785
  • 3
  • 24
  • 56