今天在编写一道算法问题的代码时,遇到一个和输入输出缓冲有关的问题。代码如下:
/*
* 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
输入输出的问题还有很多,这里只是将自己在编写代码时偶然遇到的问题记录以备以后查阅。