可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
for(i = 0; i < n; i++){
srand(time(NULL));
printf("%d ", time(NULL));
for(j = 0; j < (n-1); j++){
a[i][j] = rand();
}
}
I try to generate random numbers, but they are the same... I try srand(i * time(NULL))
. No matter..
What should i do?
Array declaration:
int** a;
int i;
printf("Enter array size: ");
scanf("%d", &n);
a = (int**)calloc(n, sizeof(int));
for(i = 0; i < n; i++)
a[i] = (int*)calloc(n-1, sizeof(int));
回答1:
Call srand()
outside of the loop. You are reseeding it every iteration.
srand()
seeds the random number generator so you get a different sequence of random numbers depending on the input. Your loop runs very fast, so the call to time(NULL)
always returns the same value. You are resetting to the same random sequence with every iteration. As a general rule, only call srand()
once in your program.
回答2:
Don't call srand()
every time through the loop - just do it once beforehand.
回答3:
FAQs 13.15 to 13.20 will be of interest. And I am tempted to create a new tag for such questions.
回答4:
srand
is a function that "seeds" the random number generator. In case you don't know, random numbers in computers aren't really random. In effect, the computer just has a list of numbers that seem random in it, and you use srand
to tell it where to start in that list, with each call to rand()
returning the next item in the list.
The reason you write srand(time(NULL))
is to get the random numbers to start at some point that isn't going to be the same every time you run the program (unless the programs start at the same time).
So what you are doing here is repeatedly telling the program to restart the random number list at the same point (because the time is the same each time you go through the loop). Move the call to srand
outside the loop and you will get the correct results.
回答5:
回答6:
srand(time(NULL));
for(i = 0; i < n; i++){
printf("%d ", time(NULL));
for(j = 0; j < (n-1); j++){
a[i,j] = rand();
}
}
Call srand once outside the loop.
回答7:
You need to call srand()
before entering the loop. srand()
initializes the radnom number generator with the given seed and generates unique sequence of random numbers for this seed.
Your loop executes very fast so every call to time(NULL)
yields the same time (measured in seconds) - hence you initialize random number generator with the same seed on every loop iteration.
回答8:
srand(time(NULL));
for(i = 0; i < n; i++){
for(j = 0; j < (n-1); j++){
a[i,j] = rand();
}
}
No matter. The number are the same...
回答9:
int** a;
int i;
printf("Enter array size: ");
scanf("%d", &n);
if( n < 1 ){
printf("Size should be > 0\n\n");
return NULL;
}
a = (int**)calloc(n, sizeof(int));
for(i = 0; i < n; i++)
a[i] = (int*)calloc(n-1, sizeof(int));
Here is my array...
回答10:
Sergey, you did not get an error message with the a[i,j]
version simply because this is a perfectly valid expression. The comma operator evaluates the sub-expressions from left to right and returns the value of the last expression. Thus, writing a[i,j]
is identical to a[j]
. What you received in the print was the value of the pointer to the j-th vector in your matrix.