printf()与Eclipse的模糊行为

时间:2014-04-05 07:32:49

标签: c eclipse stream

我是缓冲流的新手。我写了一个简单的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(),以便立即刷新它们。

问候。

2 个答案:

答案 0 :(得分:2)

仅当连接到终端时,

stdout才是行缓冲的。 Eclipse的终端仿真可能不会被检测为终端。

来自man stdout

  

当流stdout指向终端时,它是行缓冲的。

有几种方法可以解决这个限制:

  • 每次出现输出时都会调用fflush(stdout)
  • 使用setvbuf()这样设置stdout无缓冲

    setvbuf(stdout, NULL, _IONBF, 0);
    

    在使用stdout

  • 之前
  • 使用默认情况下未缓冲的stderr

答案 1 :(得分:0)

行!!经过一些谷歌搜索后,我发现eclipse终端模拟器比普通终端更多地进行缓冲。我们需要在fflush(stdout);printf进行缓存才能使其正常工作。