我是缓冲流的新手。我写了一个简单的c程序,它将一个字符串作为用户输入并显示回来。我的工作环境是windows下的eclipse。代码如下:
#include<stdio.h>
enum { max_string = 127 };
static char string[max_string+1] = "";
void main(){
printf("type the input string---> \n");
fgets(string,max_string,stdin);
printf("the input string was ---> %s\n",string);
}
在运行时,首先获取用户输入,然后执行两个printf()'s
。
输出样本是:
user input
type the input string--->
the input string was ---> user input
我在CodeBlocks IDE中尝试了上层代码并且工作正常。输出如下:
type the input string--->
user input
the input string was ---> user input
有什么问题?
我还在\n
的最后一位添加了printf()
,以便立即刷新它们。
问候。
答案 0 :(得分:2)
stdout
才是行缓冲的。 Eclipse的终端仿真可能不会被检测为终端。
来自man stdout
:
当流stdout指向终端时,它是行缓冲的。
有几种方法可以解决这个限制:
fflush(stdout)
使用setvbuf()
这样设置stdout
无缓冲
setvbuf(stdout, NULL, _IONBF, 0);
在使用stdout
。
stderr
答案 1 :(得分:0)
行!!经过一些谷歌搜索后,我发现eclipse终端模拟器比普通终端更多地进行缓冲。我们需要在fflush(stdout);
后printf
进行缓存才能使其正常工作。