连接到终端时,stdout 是行缓冲的,但我记得在某处读过(至少从 stdin 读取)会自动刷新 stdout。我使用过的所有 C 实现都做到了这一点,但我现在在标准中找不到它。
它以这种方式工作确实有意义,否则代码如下:
printf("Type some input: ");
fgets(line, sizeof line, stdin);
需要额外的fflush(stdout);
那么标准输出是否保证在这里被刷新?
编辑:
正如一些回复所说,标准中似乎不能保证在我的示例中输出到 stdout 将出现在从 stdin 读取之前,但另一方面,这个意图在(我的免费草稿副本)中说明标准:
交互设备的输入和输出动态应按照 7.19.3 中的规定进行。这些要求的目的是尽快出现无缓冲或行缓冲的输出,以确保在程序等待输入之前实际出现提示消息。
(ISO/IEC 9899:TC2 委员会草案——2005 年 5 月 6 日,第 14 页)。
所以似乎没有保证,但无论如何它可能会在大多数实现中工作。(著名遗言...)