主要内容
rand()函数
1.随机数生成用rand(),范围是0到32767
2.rand()在main主函数中一次定义赋值必是一样的数
#include<stdio.h>
#include<stdlib.h>//rand(),srand()等头文件
int main()
{
int ret = rand();
int i = 0;
do
{
printf("%d\n", ret);
i++;
} while (i<10);
}
运行结果:
3.由于rand()的随机数生成在两次运行的情况下是相同的,类似同一个剧本杀玩两次内容是一样的
#include<stdio.h>
#include<stdlib.h>
void test()
{
int ret = rand();
printf("%d\n", ret);
}
int main()
{
int i = 0;
do
{
test();
i++;
} while (i<10);
}
两次分别的运行结果
4.所以要使运行两次内容不一样,需要srand(unsigned int):设置一个随机的起点
在main中添加srand(100);
#include<stdio.h>
#include<stdlib.h>
void test()
{
int ret = rand();
printf("%d\n", ret);
}
int main()
{
srand(100); //添加这个
int i = 0;
do
{
test();
i++;
} while (i<10);
}
显示结果发生变化
因此
5.srand(unsigned int)括号中也需要一个变化的数
引入时间戳
时间戳就是现在的时间与一个电脑设定时间如1970.10.1 10:00:00相差的秒数,是一个不断变化的数
用time(NULL)接收放入stand()中
srand((unsigned int)time(NULL));//强制转换一下
每次使用前都用srand重新设置一个起点
#include<stdio.h>
#include<stdlib.h>
#include<time.h>//time对应的头函数
#include<windows.h>//Sleep()对应的头文件
void test()
{
int ret = rand();
srand((unsigned int)time(NULL));
printf("%d\n", ret);
}
int main()
{
int i = 0;
do
{
test();
i++;
Sleep(1000);//延迟一秒,用于展示这么写的漏洞
} while (i<10);
}
运行展示
产生的相近数字由于每次运行都用srand重新设置了一下。并且每次时间间隔相差1秒
因此
srand((unsigned int)time(NULL));//不宜多次使用
最后修改
生成10个随机数代码
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void test()
{
int ret = rand();
printf("%d\n", ret);
}
int main()
{
srand((unsigned int)time(NULL));//放入main()函数此处只会运行一次
int i = 0;
do
{
test();
i++;
} while (i<10);
}
生成1到100随机数
由于rand()取值是0到32767
所以rand()取余就是0到99
rand()%100+1 范围就是1 到 100
//最后生成的10个 1到100随机数代码
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void test()
{
int ret = rand() % 100 + 1;
printf("%d\n", ret);
}
int main()
{
srand((unsigned int)time(NULL));
int i = 0;
do
{
test();
i++;
} while (i<10);
}