Eclipse对printf()不能输出到控制台的解决方法

在ecplise下使用cdt开发c程序,发现运行后终端没有输出,停止后会输出,
究其原因,就是因为输出内容停留在了输出缓冲区里,而没有及时输出到控制台界面,解决的方法很简单:在每个printf后加上fflush(stdout)即可,或者,像我一样,把printf用一个宏封装一下:
#define OUTPUT_STR(str)	do{printf(str);fflush(stdout);}while(0)

      但是如果你在printf里面不止一个参数呢,或者你就能保证你的团队没有人搞忘啊!所以今天我就来讲讲setbuf函数
函数名:  setvbuf
用 法:  int setvbuf(FILE *stream, char *buf, int type, unsigned size);
type : 期望缓冲区的类型:
_IOFBF(满缓冲):当缓冲区为空时,从流读入数据。或者当缓冲区满时,向流写入数 据。
_IOLBF(行缓冲):每次从流中读入一行数据或向流中写入一行数据。
_IONBF(无缓冲):直接从流中读入数据或直接向流中写入数据,而没有缓冲区。
size : 缓冲区内字节的数量。
注意:This function should be called once the file associated with the stream has already been opened but before any input or output operation has taken place.

意思是这个函数应该在打开流后,立即调用,在任何对该流做输入输出前


为了简便:你可以在main函数中最先就调用

解决非vc6.0环境下的输出问题
	setvbuf(stdout,NULL,_IONBF,0);

例子:

#include <stdio.h>
int main(void) {
	FILE *input, *output;
	char bufr[512];
	input = fopen("file.in", "r+b");
	output = fopen("file.out", "w");
	/* set up input stream for minimal disk access,
	 using our own character buffer */
	if (setvbuf(input, bufr, _IOFBF, 512) != 0)
		printf("failed to set up buffer for input file\n");
	else
		printf("buffer set up for input file\n");
	/* set up output stream for line buffering using space that
	 will be obtained through an indirect call to malloc */
	if (setvbuf(output, NULL, _IOLBF, 132) != 0)
		printf("failed to set up buffer for output file\n");
	else
		printf("buffer set up for output file\n");
	/* perform file I/O here */
	/* close files */
	fclose(input);
	fclose(output);
	return 0;
}


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值