stdout行默认情况下缓冲,无缓冲或不确定?
 c99 7.9.13/7节规定: 
在程序启动时,三个文本stream是预定义的,不需要明确打开 – 标准input(用于读取常规input),标准输出(用于写入常规输出)和标准错误(用于写入诊断输出)。
最初打开时,标准错误stream没有被完全缓冲; 标准input和标准输出stream是完全缓冲的,当且仅当stream可以被确定为不涉及交互设备时。
所以这是有道理的。 如果您将标准输出推送到文件中,则需要将其完全缓冲以提高效率。
但是当我们无法确定设备是否是非交互式(即正常输出到terminal)时,在标准中没有提到输出是线路缓冲还是无缓冲。
 我问的原因是我的答案在这里 ,我应该插入一个fflush(stdout); 两个陈述之间: 
 printf ("Enter number> "); // fflush (stdout); needed ? if (fgets (buff, sizeof(buff), stdin) == NULL) { ... } 
 因为我没有用换行符终止printf 。 任何人都可以清除这个? 
  C99标准没有规定三个标准stream是否无缓冲或线路缓冲: 这取决于实施。 我所知道的所有UNIX实现都有一行缓冲的stdin 。 在Linux上, stdout缓冲和stderr无缓冲。 
据我所知,POSIX不会施加额外的限制。 在EXAMPLES部分,POSIX的fflush页面logging:
[…]使用fflush()函数是因为标准输出通常被缓冲,提示可能不会立即打印在输出或terminal上。
 所以你添加fflush(stdout);的说法fflush(stdout); 是正确的。 
 另一种方法是使stdout无缓冲: 
 setbuf(stdout, NULL); /* or */ setvbuf(stdout, NULL, _IONBF, 0); 
 但是正如R.注意到的,你只能这样做一次,它必须在写入stdout之前或者在其上执行任何其他的操作。  (C99 7.19.5.5 2) 
 我刚刚读了关于comp.lang.c的最近一个线程 。 其中一个评论: 
Unix的约定是
stdin和stdout在与terminal关联时是行缓冲的,而在其他情况下是完全缓冲的(又称为块缓冲)。stderr总是没有缓冲。