标准输出的缓存问题

来源:互联网 发布:淘宝上的快排能买吗 编辑:程序博客网 时间:2024/04/30 06:06

今天在编写一道算法问题的代码时,遇到一个和输入输出缓冲有关的问题。代码如下:

/* * test_stdout.c * *  Created on: 2013-4-20 *      Author: Administrator */#include <stdio.h>int main(){int a;printf("Please input a value:");scanf("%d", &a);printf("The value of a is: %d\n", a);return 0;}

执行结果如下:

3
Please input a value:The value of a is: 3

起初我很奇怪为什么调用printf函数的打印为什么会出现在输入变量a的动作之后,但是后来在他们之间加了一段代码后,终端输出逻辑就正常了。代码如下:

#include <stdio.h>int main(){int a;printf("Please input a value:");fflush(stdout);scanf("%d", &a);printf("The value of a is: %d\n", a);return 0;}
执行结果如下:

Please input a value:3
The value of a is: 3

于是在网上google了一下fflush,这个函数的作用是用来清空缓冲区的,在我们这里是清空的输出缓冲区。我们都知道stdout通常跟终端相连,通过描述符1。 如果在运行之前被重定向到非终端,那么printf会进行全缓冲,否则对一行缓冲。如果我们希望在终端及时的看到输出,那么我们需要调用该函数fflush。当然由于stdout默认是是行缓冲的,遇到\n就写内容清缓存,我们也可以采用在输出字符串末尾添加一个换行符。关于这个问题,CSDN的论坛上有一篇帖子讲的也挺详细的,给出链接如下:http://bbs.chinaunix.net/thread-693309-1-1.html

输入输出的问题还有很多,这里只是将自己在编写代码时偶然遇到的问题记录以备以后查阅。


原创粉丝点击