分支语句、循环语句难盲点

这篇博客主要是用来梳理本人在学习分支循环语句中的盲点

目录

1.用while实现scanf多组输入

 2.scanf 、getchar与缓冲区和键盘

3.rand.srand.time函数功能梳理(可使用于猜数字游戏)

1.rand函数

2.srand函数

3.time函数

 4.rand函数和srand函数的调用推测


1.用while实现scanf多组输入

我们可以通过while(scanf("%d",&num)!=0))或

while (scnaf ("%d",&num==1))          

getchar的方式:

while((temp=getchar())!=EOF) 

 验证如下:

   其中EOF的意思是end of file 文件结束标志,放在文件的末尾,这样我们就可以在控制台中输入多组了,按下Ctrl+z就可结束输入(VS编译器可能要按三次才能停下,属于是编译器的BUG)Ctrl+z会让scanf和getchar返回EOF;

注意,getchar返回的值最好用个整形来接受,char其实也行,但不要用浮点型

验证:

 2.scanf 、getchar与缓冲区和键盘

我直接上图表示了,清晰明了

那我们怎么来处理缓冲区的垃圾呢(\n和空格)

我们可以使用以下循环处理垃圾:while(temp=getchar())!='\n')

让getchar一个一个的拿掉字符,直到最后一个\n拿掉,

当然,以上场景是用于先使用scanf再使用getchar的情况。

3.rand.srand.time函数功能梳理(可使用于猜数字游戏)

   我们来模拟实现一个随机数的生成;

1.rand函数

    这就是随机数rand函数,为实现随机数,我们要先来用srand函数注入一个种子

2.srand函数

   我们来分析这个函数:首先这个函数无返回类型,然后就是参数部分这个种子的unsigned int类型的,这点我们可以使用强制类型转换来实现,seed就是种子啦;

   首先我们要给它一个数,这个数就能让srand函数产生种子给rand函数

   这时,我们引入一个不断变换的值,就可以让rand函数有种子,生成随机数了

我们可以使用到时间戳,

3.time函数

   time函数会返回一个数值,而且会返回一个时间戳放在time_t的地址处,所以现在我们有两种方式来获取时间戳,1.直接接收函数返回的值,2.通过一个值,将它的地址传给time函数,然后他就会接受到时间戳。我们可以直接使用第一种方式,直接将他放在srand函数内部,这样srand直接就接受了time函数的返回值

   所以我们可以有以下这种写法:

srand((unsigned int )time(NULL))

   这里time(NULL)是将time函数的值返回到空指针的位置上去,我们不选择这样使用,使用time直接返回的值就行了,然后将time的值强制类型转换为无符号整形就行了;

   这样,我们就创建一个随机的种子,这样我们就可以让rand函数随机的产生值了;

   如果想让rand函数产生的值是在0-100之间,可以这样表示

int num=rand()%100+1 (取模后的值就是0-99了,加1,就1-100了)

1-100的随机值就这样产生了;

 4.rand函数和srand函数的调用推测

   我们将srand和rand放在一块使用,会出现以下结果:

   这里我将srand放的是种子100,先保证种子是不变的,然后我在主函数写了一个while循环,让srand和rand不断被调用

然后我将srand放到主函数,让他程序执行只被调用一次,结果如下:

我们好像可以推迟出一个结论:

   rand函数有一个种子,rand函数就会按照种子给出一些随机数,只要种子不变,rand就会按好像是设定好的数开始生成,而这些数第一个总会是66,如果srand不断被第一次调用,66就会一直被rand设定出现。

   感觉就好像是srand每次调用就像重新赋值了一样,每次重新赋值的是一样的(100),所以rand就是一样的,所以srand被调用一次,rand后几次就不会产生关于种子第一次的值(66)。

   所以我们可以将srand放在主函数,只被调用一次,然后就可以让rand函数随机起来,再给srand配合上时间戳,让srand中种子每次值不同,这样就可以保证每次rand每次生成的第一个随机数也不相同。

   因为时间是以秒变化的,所以你快速按的状况下(1秒内按多次),srand的种子也是一样的,如果你还是放在自定义函数中,每次使用就调用一次,这一两秒内出现的值也会是相同的,所以我们要将srand放在主函数被调用,以保证srand只被调用一次,rand产生的值也不同的原理来生成更加随机的数。

每次都被调用,而且按的快的结果:

放在主函数:

 以上就是本篇博客的全部内容,如有错误希望即使指出,一定马上修改。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Brant_zero2022

素材免费分享不求打赏,只求关注

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值