C语言缓冲区问题

1、 概念介绍

缓冲区(Buffer)就是在内存中预留指定大小的存储空间用来对I/O的数据做临时存储,这部分预留的内存空间叫缓冲区。

使用缓冲区有两个好处: 
1、减少实际物理读写次数 
2、缓冲区在创建时就被分配内存,这块内存区域一直被重用,可以减少动态分配和回收内存的次数

一般在实际过程中,我们一般是先将文件读入内存,再从内存写入到别的地方,这样在输入输出过程中我们都可以用缓存来提升IO性能。

2、前几天课设写了一个循环:

#include<stdio.h>

....

int ch;

char c;

ch = getchar();

while(ch !='q')

{

扫描二维码关注公众号,回复: 2457569 查看本文章

        .......

       scanf("%c", &c);

        ch = getchar();

}

....

结果这个就成个死循环。(之前可能没好好了解缓冲区)

原因是我在scanf输入数据后会按回车结束。结果我的回车('\n')还留在缓冲区,之后的getchar就直接接收了缓冲区的'\n'然后造成了这个死循环!

这个例子中我们可以在scanf后面加一个getchar()吃掉这个'\n', 或者用fflush(stdin)清空缓冲区。

fflush的函数原型  int fflush(FILE *stream)。

猜你喜欢

转载自blog.csdn.net/weixin_42250655/article/details/80822965
今日推荐