问题:
你可能知道rand()返回的是虚假的随机数.默认的种子是1.你可以通过srand()来改变它.但是调用srand()就意味着你已经得到了随机数?下面的代码看上去是得到一个随机数,但是事实并非如此:
#include <stdlib.h> /* header for rand() and srand() */
#include <stdio.h> /* io header */
int main()
{
srand(rand());
for(int i=0;i<=9;i )
printf("%d\n",rand());
return 0;
}
每运行一次,其输出都是一个结果,您可以测试一下.也就是说要是程序在每次启动需要不同的随机数,这个方法是不可行的.如何来解决?
上面提及的srand()可以改变种子的值.但是如果你将它设为常量,那么随机数列也就是常量.可以用srand(time(0))来解决.time()返回一个time_t.你可以认为它是一个整型(int),并且值是不同的.那么,我们现在可以这么写代码来实现要求:
#include <stdlib.h> /* header for rand() and srand() */
#include <stdio.h> /* io header */
#include <time.h> /* header needed for time() */
int main()
{
srand(time(0));
for(int i=0;i<=9;i )
printf("%d\n",rand());
return 0;
}
现在是真正的随机数了,try it yourself. |