C++为什么这么打生成的数字总是一样啊!!!!

来源:百度知道 编辑:UC知道 时间:2024/06/16 12:37:14
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
void main()
{
int a,b,i;
srand((unsigned)time(NULL));
a=rand()%14;
printf("电脑的底牌为:%d\n",a);
srand((unsigned)time(NULL));
b=rand()%14;
printf("您的底牌为:%d\n",b);
}

原因:
由于计算机运行速度很快,两次time(NULL)的值实际上是相同的(注意time(NULL)的意义:返回自1970年1月1日午夜0时0分0秒到现在所经过的秒数,而两次time函数调用时间差不可能达1秒)

解决办法:
去掉第二个 srand((unsigned)time(NULL));

另外一个回答已经说清楚了。还有要说明的一点是,别人如果知道时间,知道你的算法,就知道电脑拿的是什么牌。所以这个程序是不安全的。

要得到更随机的数值,Windows上可以用CryptGenRandom函数,Linux上可以使用文件/dev/urandom。