返回信息流#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define N 10
void main()
{
int a[N],i;
for(i=0;i<N;i++)
{
srand(time(0));
a[i]=1+rand()%20;
}
for(i=0;i<N;i++)
printf("%d",a[i]);
}
请问这样编程为什么返回的数组中的值都是一样的呢,那要怎样编才能是数组中的值不一样呢?烦请各位大牛帮忙解答一下。不胜感激!
这是一条镜像帖。来源:北邮人论坛 / cpp / #32786同步于 2009/12/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
[求助]怎么产生随机数组
huangji2060
2009/12/6镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
记得随机数需要种子的吧。。。不然老是那一个。。。
【 在 huangji2060 (否定之否定) 的大作中提到: 】
: #include<stdio.h>
: #include<time.h>
: #include<stdlib.h>
: ...................
有些中断源中断的产生可以当作随机数,所以操作系统就利用了这些中断源所产生的中断来计算随机数。
你的代码有问题 要把srand(time(0)); 提到for循环以外就ok
baidu一下就知道了。。。
【 在 huangji2060 (否定之否定) 的大作中提到: 】
: #include<stdio.h>
: #include<time.h>
: #include<stdlib.h>
: ...................
2楼的是答案
【 在 huangji2060 的大作中提到: 】
: #include<stdio.h>
: #include<time.h>
: #include<stdlib.h>
: ...................
正解
【 在 jmpesp 的大作中提到: 】
: 有些中断源中断的产生可以当作随机数,所以操作系统就利用了这些中断源所产生的中断来计算随机数。
: 你的代码有问题 要把srand(time(0)); 提到for循环以外就ok
【 在 cd871206 的大作中提到: 】
: 记得随机数需要种子的吧。。。不然老是那一个。。。
我已经用了种子了,srand(time(0)); 这句就是用种子的意思吧,我也尝试过srand(time(NULL));结果是一样的
【 在 jmpesp 的大作中提到: 】
: 有些中断源中断的产生可以当作随机数,所以操作系统就利用了这些中断源所产生的中断来计算随机数。
: 你的代码有问题 要把srand(time(0)); 提到for循环以外就ok
果然是这样,问题解决了,谢谢啦!
【 在 huangji2060 的大作中提到: 】
: #include<stdio.h>
: #include<time.h>
: #include<stdlib.h>
: ...................
POSIX.1-2001 gives the following example of an implementation of rand()
and srand(), possibly useful when one needs the same sequence on two
different machines.
static unsigned long next = 1;
/* RAND_MAX assumed to be 32767 */
int myrand(void) {
next = next * 1103515245 + 12345;
return((unsigned)(next/65536) % 32768);
}
void mysrand(unsigned seed) {
next = seed;
}