stdout es un buffer de línea cuando está conectado a un terminal, pero recuerdo haber leído en alguna parte que la lectura (al menos desde stdin) se borrará automáticamente stdout. Todas las implementaciones C que he usado han hecho esto, pero ahora no puedo encontrarlo en el estándar.¿Lectura de stdin flush stdout?
Tiene sentido que funciona de esa manera, de lo contrario código como este:
printf("Type some input: ");
fgets(line, sizeof line, stdin);
necesitaría un extra fflush(stdout);
Así está garantizada la salida estándar a ser eliminados en esta lista?
EDIT:
Como varias respuestas han dicho, no parece haber ninguna garantía en la norma que la salida a la salida estándar en mi ejemplo aparecerá antes de la lectura de la entrada estándar, pero por otra parte , esta intención se afirma en (mi proyecto copia gratuita de) la norma:
la entrada y salida dinámica de dispositivos interactivos tendrán lugar como se especifica en 7.19.3. La intención de estos requisitos es que sin búfer o salida de búfer de línea aparezcan tan pronto como como sea posible, para asegurarse de que los mensajesaparezcan realmente antes de un programa a la espera de la entrada.
(ISO/IEC 9899: Comité TC2 Borrador - 6 de mayo de 2005, página 14).
Parece que no hay garantía, pero probablemente funcionará en la mayoría de las implementaciones de todos modos. (Famosas últimas palabras ...)
Después de la referencia cruzada a 7.19.3 (7.21.3 en C11) también es útil, ya que menciona qué operaciones de entrada se espera que causen enrojecimiento. Estos se discuten en https://stackoverflow.com/a/39536803/8586227. –