Random number is not reused


 
Thread Tools Search this Thread
Top Forums Programming Random number is not reused
# 1  
Old 11-30-2009
Random number is not reused

I need to generate and reuse a 5 digit random number every time my program is executed. But the following generates random numbers every time the function is called.
Code:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <time.h>

int RANDOM(void)
{
    int RANDOMNUMBER = 0;

    srand((unsigned int)time(NULL));
    RANDOMNUMBER = rand() % 99999; // create a random 5 digit number to be reused in other functions

    if (RANDOMNUMBER < 10000)
    {
        RANDOMNUMBER = RANDOMNUMBER + 10000; // correction because sometimes the number generated is 4 digits long
    }

    return RANDOMNUMBER;
}

char *ONE(void)
{
    static char ONE1[15] = "";

    sprintf(ONE1, "ONE%.5i", RANDOM());

    return ONE1;
}

char *TWO(void)
{
    static char TWO2[15] = "";

    sprintf(TWO2, "TWO%.5i", RANDOM());

    return TWO2;
}

void THREE(void)
{
    printf("THREE%.5i\n", RANDOM());
}

int main(void)
{
/* A different random number is output every second. This is a problem because the program takes various seconds to execute.
How can I reuse a random number every time the program is executed ? */

    puts(ONE());
    sleep(1);
    puts(ONE());
    sleep(1);
    puts(ONE());
    sleep(1);
    puts(TWO());
    sleep(1);
    puts(TWO());
    sleep(1);
    puts(TWO());
    sleep(1);
    THREE();
    sleep(1);
    THREE();
    sleep(1);
    THREE();

    return 0;
}

# 2  
Old 11-30-2009
You're reseeding the PRNG every time you're calling your own RANDOM, so it's no wonder you're getting different values every time. If you need just one "random" value, call rand() once per program execution and save the value, or save the seed value and reuse that.
# 3  
Old 11-30-2009
Quote:
Originally Posted by pludi
... call rand() once per program execution and save the value, or save the seed value and reuse that.
I've been fiddling with this for hours. I've tried to save the random number in a variable outside a function but gcc keeps saying something like that the random number is not constant. Somehow I always end up with a different random number.

If somebody could draw up a quick example I would be grateful.
# 4  
Old 11-30-2009
How did you try to save it? Usually, I'd just allocate one global int, assign it the value, and be done with it. gcc shouldn't complain about that.
# 5  
Old 11-30-2009
Quote:
Originally Posted by pludi
How did you try to save it? Usually, I'd just allocate one global int, assign it the value, and be done with it. gcc shouldn't complain about that.
gcc error:
Quote:
23: error: initializer element is not constant
Code:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <time.h>

int RANDOM(void)
{
    int RANDOMNUMBER = 0;

    srand((unsigned int)time(NULL));
    RANDOMNUMBER = rand() % 99999; // create a random 5 digit number to be reused in other functions

    if (RANDOMNUMBER < 10000)
    {
        RANDOMNUMBER = RANDOMNUMBER + 10000; // correction because sometimes the number generated is 4 digits long
    }

    return RANDOMNUMBER;
}

int NUMBER = RANDOM();

char *ONE(void)
{
    static char ONE1[15] = "";

    sprintf(ONE1, "ONE%.5i", NUMBER);

    return ONE1;
}

char *TWO(void)
{
    static char TWO2[15] = "";

    sprintf(TWO2, "TWO%.5i", NUMBER);

    return TWO2;
}

void THREE(void)
{
    printf("THREE%.5i\n", NUMBER);
}

int main(void)
{
/* A different random number is output every second. This is a problem because the program takes various seconds to execute.
How can I reuse a random number every time the program is executed ? */

    puts(ONE());
    sleep(1);
    puts(ONE());
    sleep(1);
    puts(ONE());
    sleep(1);
    puts(TWO());
    sleep(1);
    puts(TWO());
    sleep(1);
    puts(TWO());
    sleep(1);
    THREE();
    sleep(1);
    THREE();
    sleep(1);
    THREE();

    return 0;
}

# 6  
Old 11-30-2009
It's saying it's not constant because it's not. Smilie You can't initialize variables from non-constant things, i.e. functions in C. Initialize it once at the beginning of main().
# 7  
Old 11-30-2009
Quote:
Originally Posted by Corona688
It's saying it's not constant because it's not. Smilie You can't initialize variables from non-constant things, i.e. functions in C. Initialize it once at the beginning of main().
I tried deleting the RANDOM function and placing its contents inside main, then use a variable to feed the random number to the other functions. This works yet it defeats the whole purpose of using a function to generate a random number.

This is for a website, so having to include this bunch of code inside every single webpage is kind of inefficient... That is why I wanted to use a single function.

Is there no other way of achieving this by reusing the RANDOM function???
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

random number

How can I choose randomly the row numbers of my file in awk? (4 Replies)
Discussion started by: Homa
4 Replies

2. Shell Programming and Scripting

Create random number

Hi, I'm trying to create a script that will print random numbers with length of three. Below is the expected out. 928-377-899 942-458-310 951-948-511 962-681-415 995-161-708 997-997-209 thanks (4 Replies)
Discussion started by: reignangel2003
4 Replies

3. Shell Programming and Scripting

Random pieces of number

Hello folks, i have number for example 10 and i want to divide into 4 random pieces that may be (6+2+1+1). How can i do this via script i have random number 234951 and i want to divide into 31 pieces. (6 Replies)
Discussion started by: learnbash
6 Replies

4. Programming

Generate random number

I saw this formula to generate random number between two specified values in shell script.the following. $(((RANDOM%(max-min+divisibleBy))/divisibleBy*divisibleBy+min)) Give a example in book. Generate random number between 6 and 30.like this. $(((RANDOM%30/3+1)*3)) But I have a... (1 Reply)
Discussion started by: luoluo
1 Replies

5. Programming

C Help; generating a random number.

Im new to C, and Im having a hard time getting a random number. In bash, I would do something similar to the following to get a random number; #!/bin/bash seed1=$RANDOM seed2=$RANDOM seed3=$RANDOM SEED=`expr $seed1 * $seed2 / $seed3` echo ${SEED%.*} Now, in online examples... (4 Replies)
Discussion started by: trey85stang
4 Replies

6. Shell Programming and Scripting

ksh: random number between 1-10

How do I create a random number between 1 and 10 in kornshell? (2 Replies)
Discussion started by: dangral
2 Replies

7. Shell Programming and Scripting

Regarding Random Number Genration

HI please help me in solving this issue. I have a shell script which consists of ten statemnts ( i mean 10 executable statments)...........and if i run that script the 10 statmenst will execute continously ............ But now my probelm is i have to write another script --> to... (0 Replies)
Discussion started by: lalitka
0 Replies

8. Programming

Random number generation

Hi...How can I generate random numbers between a given range ...preferably between 1 and 100...in UNIX C programming...? I tried out functions like rand(),drand48() etc but didnt get satisfactory results... Thanks a lot in advance.......... (1 Reply)
Discussion started by: tej.buch
1 Replies

9. Programming

random number logic -- issue

I use standard C random number generation logic in my application. long nCounter; long lRndNo; char rand; srand48(nCounter); lRndNo = lrand48(); sprintf(rand,"%010.10d",lRndNo); However we always find that the rand generated starts with '0','1' or '2'. I could not logically prove if... (1 Reply)
Discussion started by: asutoshch
1 Replies

10. Programming

How to generate a random number?

How to generate a random integer with specific range(for example, from 1 to 1000)? Also, how to convert a floating point number into a integer? (2 Replies)
Discussion started by: MacMonster
2 Replies
Login or Register to Ask a Question