在c。
中使用srand()时出现以下问题我在循环中调用srand(time(NULL)),但循环在1 秒之前结束,每次调用rand()时我都会得到相同的结果值。
我该如何解决这个问题?
答案 0 :(得分:1)
为什么要在循环中调用srand
?只需在程序开始时调用一次,然后多次调用rand
。
答案 1 :(得分:0)
不要在循环中调用srand。你为什么这样做?
只需在循环外初始化一次。
答案 2 :(得分:0)
您只需初始化srand()
一次,然后您只需使用rand()
生成随机数。要生成随机数,请使用Better random algorithm?
如果要生成1到10之间的随机整数,则应该 总是通过使用高位来实现,如
j = 1 + (int) ( 10.0 * ( rand() / ( RAND_MAX + 1.0 ) ) );
答案 3 :(得分:0)
srand
的目的是初始化随机数生成器。
其参数称为种子。如果你给两次相同的种子,你可以期望随机数生成器(后续调用rand()
)返回相同的“随机”数字序列。
在你的情况下,你经常使用相同的值调用srand(直到第二次更改),因此rand()将始终返回相同的值。
您只需拨打srand
一次。
答案 4 :(得分:0)
因为种子被绑定到时间(),这是自unix时代以来的秒数,基本上你给它相同的种子因为循环花了不到一秒钟。
你应该做的是以微秒为单位获得时间。看看gettimeofday(),如果你正在编写windows google microseconds win32 C,你需要将它从double转换为integerso只需这样做(unsigned int)double * 100.0f;
答案 5 :(得分:0)
我在你的帮助下找到了答案。
struct timeval tv;
gettimeofday(&tv,NULL);
unsigned long time_in_micros = 1000000 * tv.tv_sec + tv.tv_usec;//find the microseconds for seeding srand()
srand(time_in_micros);