How to make "rand()" generate actual random numbers? [duplicate] - c

This question already has answers here:
rand() not generating random numbers after modulo operation
(8 answers)
Closed 7 years ago.
I got this code:
#include <stdio.h>
#include <conio.h>
int rand();
int main()
{
int a = 1;
while (a<=15)
{
printf("%d\n", rand());
a++;
}
return 0;
}
The function to generate random numbers generate the same numbers in every execution, how do I fix that?

You need to initalise your rand() with srand() like so :
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
int main()
{
srand(time(NULL));
int a = 1;
while (a<=15)
{
printf("%d\n", rand());
a++;
}
return 0;
}
In short, you need to feed your random some seeds so it can do his work, but you want to give him new seeds at each run, thus the use of time(NULL).
Oh, and also, you don't need to declare int rand(); before your main, but instead add <stdlib.h> to your list of includes.
Keep up the learning !

You have to set a seed so just do this before your while loop (Also don't forget to include: time.h):
srand(time(NULL));

You can generate different random numbers by using
#include <stdlib.h> // for rand() and srand()
#include <time.h> // for time()
// other headers
int main()
{
srand(time(NULL));
// rest of your code
}
By using srand(), you can seed the Random Number generator to get different random numbers on different runs of the program.
And also remove int rand(); from your code, unless you are trying to create your own rand() function

Seet seed or srand(time(NULL));
If u set with time, include <time.h> library.
I recomended you include <stdlib.h> - this is for srand or rand function.

Related

how to create endless random numbers

I tried to generate infinite random number of range 0-9 using while loop, however my code only manage to generate 1 random number before exiting, why is it and how could I change it? Below is my code.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
while(1 < 2) {
srand(time(NULL));
printf("%d\n", rand() % 9);
}
return 0;
}
This:
while (1 < 2)
is of course always true, so the loop will run forever. I tried it, and it works for me at least.
A more concise way of writing an infinite loop is
for (;;)
or maybe
while (true)
but the for version has fewer magical constants so it can be considered better in some dimension.
Also, don't call srand() all the time, that will reset the RNG for each iteration. Just call it once, if you feel you have to, before the loop.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
srand(time(NULL));
for (;;) {
printf("%d\n", rand() % 10);
}
return 0;
}
Also, note that I changed it to % 10, with % 9 you only get numbers in the range 0 through 8, inclusive.

Random password generator same string

This is my first C program and I wanted to make a random password, but every time I run the program, it generates the same string. (always generates "pkDHTxmMR1...") This is not going to actually be used so the security of rand() doesn't really matter to me. Why would it output the same string every time that I run it?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//this is a program to generate a random password
int main()
{
int counter = 0;
srand(time(NULL));
char randChar;
int passwordLength;
printf("Type in a password Length \n");
scanf("%d", &passwordLength);
while(counter < passwordLength)
{
//seed random based on time
srand(time(NULL));
randChar = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"[random () % 62];
printf("%c", randChar);
counter++;
}
return 0;
}
Oh dear. Everybody has got the answer wrong, including me before I tried the questioner's code for myself.
In fact, yes there should be no call to srand() in the loop because it will reseed the random number generator on each iteration. However, there should also be no call to srand() outside the loop either because the function used to generate actual random numbers is random() not rand(). The correct code is
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int counter = 0;
srandom(time(NULL)); // Correct seeding function for random()
char randChar;
int passwordLength;
printf("Type in a password Length \n");
scanf("%d", &passwordLength);
while(counter < passwordLength)
{
randChar = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"[random () % 62];
printf("%c", randChar);
counter++;
}
printf("\n"); // Stops the output from being on the same line as the prompt
return 0;
}
Your loop takes less than a second to run.
Therefore, time(NULL) always returns the same value, so your random numbers all have the same seed.
Don't do that.
The standard:
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.
It is very likely that the time_t on your system is based on seconds or something like that. But the execution time between srand() calls is far far less than one second, so you keep feeding it the same seed value.
Always just call srand() once in your whole program.

C random number generator making the same number

How do i get the random number generator in c to give me different numbers when ever my function is called.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
printf("%i",num());
printf("%i",num());
}
int num() {
int MAX = 100;
srand ( time(NULL));
int num = rand() % MAX;
return num;
}
No matter how many times i call the num function, it always prints the same number. How do i fix this so the number is different for every call.
The time function typically returns the time in second resolution, which means that if you call time(NULL) twice within one second then you will get the same result.
That will of course mean that you set the same starting seed to the random-number generator, which means the sequence will be the same.
You typically only call srand once, early in the main function.
Move
srand ( time(NULL));
to main() . You need to call srand() once in main() and keep calling rand()

Rapid random number generating function in C

I'm trying to make a random number generator that produces many new random numbers very quickly. I have tried srand(time(NULL)) but since I'm trying to generate many number quickly this won't work. Next I tried this:
int main()
{
seed_plus=time(NULL);
int i;
for (i=0; i<10;i++)
{
double R=ran(seed_plus);
printf("%lf\n",R);
seed_plus=seed_plus+1;
}
}
double ran (int seed_plus)
{
srand(seed_plus);
double random_number = (double)random()/(double)RAND_MAX;
return(random_number);
}
This works, but I would like to have "seed_plus=seed_plus+1" contained within the "ran" function. When I move that statement inside the function I get many of the same "random" number, which leads me to believe that seed_plus is not being saved to memory since it is not the value being returned by the function?
I'm pretty new to C, so any help would be appreciated!
You only have to call srand one time, after that, all next calls to random will return different numbers each time.
There is no reason to seed the random number generator every time you need a random number. Just simplify your code:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
double ran(void)
{
return (double)rand() / RAND_MAX;
}
int main(void)
{
srand(time(NULL));
for (int i = 0; i < 10; i++)
printf("%f\n", ran());
}

rand() issue in C programming? [duplicate]

This question already has answers here:
Closed 10 years ago.
Possible Duplicate:
Why do I always get the same sequence of random numbers with rand()?
So yeah, this might seem slightly noobish, but since I'm teaching myself C after becoming reasonable at Java, I've already run into some trouble. I'm trying to use the rand() function in C, but I can only call it once, and when it do, it ALWAYS generates the same random number, which is 41. I'm using Microsoft Visual C++ 2010 Express, and I already set it up so it would compile C code, but the only thing not working is this rand() function. I've tried including some generally used libraries, but nothing works. Here's the code:
#include "stdafx.h"
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
int main(void)
{
printf("%d", rand()); //Always prints 41
return 0;
}
This because the rand() initializes its pseudo-random sequence always from the same point when the execution begins.
You have to input a really random seed before using rand() to obtain different values. This can be done through function srand that will shift the sequence according to the seed passed .
Try with:
srand(clock()); /* seconds since program start */
srand(time(NULL)); /* seconds since 1 Jan 1970 */
You have to seed rand().
srand ( time(NULL) ); is usually used to initialise random seed. Otherwise,
You need a seed before you call rand(). Try calling "srand (time (NULL))"
You must first initialise the random seed using srand().
#include "stdafx.h"
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
int main(void)
{
srand(time(NULL)); // Initialise the random seed.
printf("%d", rand());
return 0;
}
rand() gives a random value but you need to seed it first. The problem is that if you execute your code more than once (probably), with the same seed srand(time(NULL)), then rand(); will give always the same value.
Then, the second option is to execute, as Thiruvalluvar says, srand(time(NULL)) and then rand().
The one above will give you 1000 random numbers. Try to execute this code and see what happens:
srand (time(NULL));
for (int i=0; i<1000; i++)
{
printf ("Random number: %d\n", rand());
}
Hope it helps!

Resources