gcc 4.4.4 c89
我正在使用下面的代码.但是,我一直得到相同的数字:
size_t i = 0;
for(i = 0; i < 3; i++) {
/* Initialize random number */
srand((unsigned int)time(NULL));
/* Added random number (simulate seconds) */
add((rand() % 30) + 1);
}
Run Code Online (Sandbox Code Playgroud)
我想回到0到30.但是,我最后一次跑这个三次得了17次.
非常感谢,
Mar*_*off 21
你播种内环路(具有相同的价值,因为有多快循环将被执行),这将导致生成的是每一次相同的随机数.
您需要在循环外移动种子函数:
/* Initialize random number */
srand((unsigned int)time(NULL));
for(i = 0; i < 3; i++) {
/* Added random number (simulate seconds) */
add((rand() % 30) + 1);
}
Run Code Online (Sandbox Code Playgroud)
你需要在你的程序开始时只调用一次srand.
srand使用时间以秒为单位初始化伪随机数生成器.如果使用特定数字对其进行初始化,则始终会获得相同的数字序列.这就是为什么你通常想要在开始时使用时间初始化它(这样每次运行程序时种子都不同)然后只rand用于生成看似随机的数字.
在你的情况下,时间不会从迭代变为迭代,因为它的分辨率只有1秒,所以你总是得到伪随机序列的第一个数字,它始终是相同的.