c语言随机数猜字,玩猜字游戏顺便理解c语言的伪随机数(rand,srand)

随机数

要想要产生真正的随机数,需要先来了解下面几个函数。

rand()函数

C 库函数 int rand(void) 返回一个范围在 0 到 RAND_MAX 之间的伪随机数。

RAND_MAX 是一个常量,它的默认值在不同的实现中会有所不同,但是值至少是 32767。

srand()函数

C 库函数 void srand(unsigned int seed) 播种由函数 rand 使用的随机数发生器。

seed --这是一个无符号整型值,用于伪随机数生成算法播种。

这里有一个新的概念,也就是“种子”,我们可以简单的理解为产生随机数的起点。

伪随机数生成器会以种子作为起点,产生上述范围内的伪随机数,如果没有设置种子的话,系统会默认seed为1,那么就会产生这样的后果:产生的数是随机的,但每次运行程序,得到的结果都还是上次的随机值,因为随机数产生的起点没变,伪随机数生成器还是按照原来方式进行周期的取值,而这就不是我们所期望的结果。

那么用什么作为种子,让这个起点不断变化呢?时间,就是一个很好的选择!于是我们会用到一个概念——时间戳。

time()函数

C 库函数https://www.lover27.com ,time_t time(time_t *seconds) 返回自纪元 Epoch(1970-01-01 00:00:00UTC)起经过的时间,以秒为单位。如果 seconds 不为空,则返回值也存储在变量 seconds 中。

time_t这是一个适合存储日历时间类型,如果要作为种子,需要强制类型转换为无符号整型。

time(NULL)将返回计算机目前的时刻与1970年1月1日0时0分0秒之间的时间差,单位是秒。

理解了上述函数之后,再产生随机数就简单多了。

先利用动态的时间去设置一个随机种子:

srand((unsigned int)time(NULL));

1

因为时间戳返回的数值比较大,我们可以取余得到想要的范围,例如我想要的范围是1~100,可以这样做:

num = rand()%100;

1

猜字游戏

好了,知道如何产生随机数以后,我们利用这个随机数来写一个很简单的猜字游戏吧。

#include

#include //rand()和srand()函数的库

#include //time()函数的库

int main()

{

srand((unsigned int)time(NULL));//产生一个动态的随机种子

int input = 0;

int num = 0;

num = rand() % 100;

printf("猜猜我心里想的数,在1~100之间选择:\n");

while ((scanf("%d", &input)) != EOF)

{

if (input > num)

{

printf("你的数猜大了,再试试看。\n");

}

else if (input

{

printf("你的数猜小了,再试试看。\n");

}

else

{

printf("恭喜你猜对了,真是天才啊!\n");

}

}

return 0;

}

程序运行后

8f4cbadb4dadf3c5e7ed06f97031b3fa.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值