目录
理解回车和换行(\r&&\n)
那如何实现单独的回车和换行呢?
缓冲区
证明有缓冲区的存在
编辑
怎么刷新缓冲区(显示器缓冲区)?
fflush函数编辑
缓冲区出现的意义
I/O流
模拟倒计时小程序来理解缓冲区
理解回车和换行(\r&&\n)
在我们的c语言中,\n表示的是换行,可是,实际上这里的换行有两个动作:回车+换行。回车就是将光标平移到一行的最左边,换行就是光标向下平移一行。像我们键盘上的“回车键”,按下回车键后执行的是两个动作:回车+换行。
这也是为什么之前的回车键设置成这样
那如何实现单独的回车和换行呢?
\r表示回车
\r\n 存在\r时,\n表示换行
\n表示回车加换行
缓冲区
缓冲区(Buffer)是计算机科学中常见的概念,它是一块内存区域,用于存储临时数据。缓冲区的目的是在数据传输过程中缓存数据,以便更有效地处理和传递。
证明有缓冲区的存在
观察以下代码
为什么不是先打印hello再执行sleep函数呢?我们知道,c语言编译是从上往下顺序编译的,也就是说,编译器一定是先执行printf函数然后才是执行sleep函数。
那为啥显示器不会马上显示printf的内容呢?
首先,显示器上能不能显示printf函数的内容,和printf函数能否执行是两码事。
也就意味着,printf函数的执行并不是直接输出到显示文件上,而是先输出到缓冲区,还没来得及从缓冲区输出到显示文件上,就执行sleep函数休眠了,这也是要等3秒才会打印出hello字符。
怎么刷新缓冲区(显示器缓冲区)?
1、程序结束的时候,一般会自动刷新缓冲区
2、缓冲区满了
3、遇到 \n 刷新前面的内容(按行刷新)
4、显式调用缓冲刷新函数强制刷新(c语言中的fflush函数 )
fflush函数
缓冲区出现的意义
性能优化: 缓冲区可以用来提高程序的性能。通过在内存中存储临时数据,程序可以利用缓冲区进行高效的读写操作,而不必每次都直接访问慢速的外部存储设备。这对于 I/O 操作(如文件读写、网络通信)和数据库访问等场景特别重要。
临时存储: 缓冲区提供了一种临时存储数据的方式。在处理大量数据时,可以使用缓冲区来存储部分数据,而不必一次性加载整个数据集。
数据交互: 缓冲区在数据交互过程中发挥关键作用。例如,通过在网络通信中使用缓冲区,可以将大块的数据分割成小块,减少网络传输的延迟,提高效率。
I/O流
c语言中,当我们启动一个程序的时候,系统会默认给我们打开三个标准的输入输出流:stdin、stdout、stderr 当我们用fflush(stdout)的时候,就会刷新显示器文件的缓冲区
这三个流其实就是三个文件的指针,可以实现基本的用户交互。也是为什么我们能写代码、看见代码、看见报错信息。
模拟倒计时小程序来理解缓冲区
观察以下代码
for循环10-0并输出i,每次用printf输出i的时候都用fflush强制刷新,这样我们就能马上将数字i从缓冲区打印到显示器上,我们再用\r回车,使得光标再次移动到这一行的最左边,这样下次打印就会从光标处重新输出,覆盖之前的的数字。
这样一来,我们就利用缓冲区这一概念完成了一个倒计时的小程序,简洁明了。