【发布时间】:2011-04-13 00:49:22
【问题描述】:
c99 的 7.9.13/7 部分指出:
在程序启动时,三个文本流是预定义的,不需要显式打开 - 标准输入(用于读取常规输入)、标准输出(用于写入常规输出)和标准错误(用于写入诊断输出)。
最初打开时,标准错误流没有完全缓冲;当且仅当可以确定流不引用交互式设备时,标准输入和标准输出流才会被完全缓冲。
所以这是有道理的。如果您将标准输出推送到文件中,您希望它完全缓冲以提高效率。
但是当您无法确定设备是非交互式的(即正常输出到终端)时,我在标准中找不到关于输出是行缓冲还是非缓冲的提及.
我问的原因是对我的回答 here 的评论,我应该在两个语句之间插入一个 fflush(stdout);:
printf ("Enter number> ");
// fflush (stdout); needed ?
if (fgets (buff, sizeof(buff), stdin) == NULL) { ... }
因为我没有用换行符终止 printf。谁能解决这个问题?
【问题讨论】: