标准输出的缓存问题

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

/*
 * 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

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


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值