IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 分支语句、循环语句难盲点 -> 正文阅读

[C++知识库]分支语句、循环语句难盲点

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

目录

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产生的值也不同的原理来生成更加随机的数。

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

放在主函数:

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

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-17 11:19:46  更:2022-01-17 11:20:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/28 4:24:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码