从stdin读取标准输出?

Tho*_*thy 15 c stdin stdout flush

当连接到终端时,stdout是行缓冲的,但我记得在某处读取(至少从stdin)将自动刷新stdout.我使用的所有C实现都已经完成了,但我现在无法在标准中找到它.

它确实有意义,它是这样的,否则代码如下:

printf("Type some input: ");
fgets(line, sizeof line, stdin);
Run Code Online (Sandbox Code Playgroud)

需要一个额外的 fflush(stdout);

那么stdout肯定会在这里刷新吗?

编辑:

正如几个回复所说,标准中似乎无法保证我的示例中的stdout输出将在从stdin读取之前出现,但另一方面,这个意图在(我的免费草稿副本)中说明了标准:

交互设备的输入和输出动态应按照7.19.3的规定进行.这些要求的目的是尽快出现无缓冲或行缓冲输出,以确保在程序等待输入之前实际出现提示消息.

(ISO/IEC 9899:TC2委员会草案 - 2005年5月6日,第14页).

所以似乎没有保证,但无论如何它可能适用于大多数实现.(著名遗言...)

iro*_*ggy 5

不,不是的.


Alo*_*hal 5

要回答你的问题,你需要额外fflush(stdout);的后printf()通话,以确保你的程序试图读取输入之前出现的提示.读书stdinfflush(stdout);适合你.