我在下面写了这个C代码,当我循环时,它返回一个随机数。如果执行myrand(),如何实现5个不同的随机值?
#include <stdio.h>
#include <stdlib.h>
int myrand() {
int ue_imsi;
int seed = time(NULL);
srand(seed);
ue_imsi = rand();
return ue_imsi;
}
int main()
{
int value = 0;
int i=0;
for (i=0; i< 5; i++)
{
value =myrand();
printf("value is %d\n", value);
}
}
答案 0 :(得分:23)
播种发生器应该进行一次(当然要生成每个随机数序列!):
#include <stdio.h>
#include <stdlib.h>
int main()
{
int seed = time(NULL);
srand(seed);
int value = 0;
int i=0;
for (i=0; i< 5; i++)
{
value =rand();
printf("value is %d\n", value);
}
}
答案 1 :(得分:5)
在循环播放之前将srand()
电话移至main()
。
换句话说,请拨打srand()
一次,然后重复拨打rand()
,而无需再调用srand()
:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int value = 0;
int i = 0;
srand(time(NULL));
for (i = 0; i < 5; i++)
{
value = rand();
printf("value is %d\n", value);
}
}
答案 2 :(得分:0)
种子()的要点是开始具有已知值的随机数序列,
然后,在给定相同种子的情况下,您将始终获得相同的数字序列。
这就是为什么你有seed(),它允许你生成相同的序列进行测试,或者给出一个随机的种子(通常是时间)你每次都得到一个不同的序列
答案 3 :(得分:0)
试试这个:
#include <stdio.h>
#include <time.h>
int main(void) {
for (int i = 0; i < 10; i++) {
printf("%ld\n", (long)time(NULL));
}
}
我的“猜测”是将打印10个相等的值:)
答案 4 :(得分:-2)
如果你想在每次拨打random()
时重新设置(额外的随机性),这是你可以做到的一种方式:
srandom( time(0)+clock()+random() );
time()
每秒更新一次,但每次运行程序时都会有所不同clock()
更频繁地更新,但每次运行程序时都从0开始random()
如果您的循环速度快于clock()
当然,如果你真的想要随机性,你可以做得更多 - 但这是一个开始。