首页 > 编程知识 正文

c语言中%s和%c,c语言缓冲区是什么意思

时间:2023-05-05 07:23:14 阅读:120072 作者:4650

导读: c语言中最常用的输入输出方式是scanf (和printf )。

scanf():标准输入设备(键盘)读取数据,并将值存储在变量中。printf():将指定的字符/字符串输出到标准输出设备(画面)。 注意宽度的输出和精度

输出控件。 c语言利用适当的缓冲器进行输入输出。

上面的概略图 ̄ ̄|| OK,接下来进入正题吧:

1. 流是什么?“流动”是流动的意思,是物质从一个地方向另一个地方流动的过程,是有序连续、有方向性的数据(其单位可以是bit、byte、packet )

“流”:是将信息从外部输入设备(如键盘)输入计算机内部(如内存)或将信息从内存输出到外部输出设备(显示器)的过程。 这个输入输出的过程被比喻为“流程”。 其特性是有序连续、有方向性。

2.对输入输出缓冲区的理解:1 .为什么要部署缓冲区? 例如,从磁盘中检索信息时,可以首先将读取的数据放在缓冲区中,计算机直接从缓冲区中检索数据,提取缓冲区中的数据,然后从磁盘中读取,从而减少磁盘的读写次数。 此外,计算机对缓冲区的操作大大快于对磁盘的操作,应用缓冲区大大提高了计算机的运行速度

例如,我们用打印机打印文档。 由于打印机的打印速度相对较慢,因此首先将文档输出到打印机的相应缓冲区,然后由打印机自行逐步打印。 此时,我们的CPU可以处理别的事情。

这样您基本上明白了吗? 缓冲区是用于在输入/输出设备和CPU之间缓存数据的内存区域。 这使低速输入/输出设备和高速CPU协同工作,防止低速输入/输出设备占用CPU,并释放CPU以实现高效工作。

2 .缓冲区类型缓冲区有三种类型:完整缓冲区、行缓冲区和无缓冲区。

在完整缓冲区的情况下,实际I/O操作发生在标准I/O缓存已满之后。 完整缓冲区的代表是对磁盘文件的读写。

在行缓冲区中,如果在输入/输出过程中出现换行符,则会执行真正的I/O操作。 此时,输入的字符存储在缓冲区中,在按回车键换行之前不会进行实际的I/O操作。 代表性的是标准输入(stdin )和标准输出(stdout )。

在无缓冲器(即无缓冲器)的情况下,标准错误状况stderr是代表性的,并且可以立即显示错误消息。

3 .如果不自行设置缓冲区大小缓冲区,则系统默认为标准输入/输出设置缓冲区。 此缓冲区的大小通常为512字节。

缓冲区大小由stdio.h头文件中的宏BUFSIZ定义。 如果想查看大小,可以直接输出其值,包括头文件。 printf('%d ',BUFSIZ );

可以调整缓冲区的大小。 也可以将文件与自定义缓冲区相关联。 有关详细信息,请参见setvbuf )和setbuf ) )函数。

4 .缓冲区的刷新(清除)以下时,会引起缓冲区的刷新。

缓冲区满时; 行缓冲器遇到滑架返回时; 关闭文件; 使用特定函数刷新缓冲区。

5 .结合缓冲区的深度谈谈c语言的getchar (。 首先getchar ) )让我们来看看。 其原型为: intgetchar ) void );

当程序调用getchar ()函数时,程序将等待用户按键。 用户输入的字符存储在键盘缓冲区中,直到用户按回车。 回车字符也存储在缓冲区中。 当用户输入回车时,getchar ()函数开始从键盘缓冲区逐字符读取字符。 也就是说,后续的getchar ) )函数调用直接读取缓冲区中的字符,而不是等待用户按键,直到缓冲区中的字符读完为止。 例如,键盘缓冲区就像自来水管与你的程序相连。 程序为getchar ) )调用函数,用户输入字符,就像向水管注入水一样。 这个水的注入量取决于你输入多少。 执着的棉花糖按下返回键停止注水(getchar ) )函数开始从键盘缓冲区(也就是我们的水管)抽水。 每次只能读一个字。 也就是说每次都汲取一定量的水。 的棉花糖,以后也继续调用getchar ) )函数,接下来取水管上上次没用的水。 水管不空(刷新缓冲区),因此在该阶段不需要再输入。 getchar ) )因为调用函数可以获取水。 在水管中没有水之前(getchar ) )必须调用函数。 那时候呢

通俗一点说,程序调用getchar (函数时,程序等待用户按键,然后用户按回车键返回。 在此期间按下的字符存储在缓冲区中,第一个字符作为函数返回值。 getchar ) )继续调用函数,返回刚才输入的第二个字符,而不是等待用户按键。 继续调用,返回第三个字符。 等待用户按键,直到缓冲区中的字符读完。

getchar ()函数的执行是采用行缓冲器。 getchar (第一次调用函数时,程序用户)必须输入一行字符,然后按回车键函数才能返回。 此时,用户输入的字符和换行符都存储在行缓冲器中。 再次调用getchar ()函数时,将逐步输出行缓冲区的内容。

请看以下示例:

执行结果如下。

稍微改变一下程序:

执行结果:

上面第二次打印时是空格而不是2。 你觉得是为什么? 读者可以结合上述进行更多的思考。

总结:

以上是这篇文章的所有内容。 希望大家的学习有一定的参考学习价值。 如果有疑问的话请用信息交流。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。