comando c++ stdout flush

comando - stdout y necesidad de limpiarlo C++



cout flush c++ (7)

Tengo algún código C ++ que usa sentencias cout para fines de depuración y, por alguna razón, no puedo imprimir todos los datos a menos que haga un std::cout.flush(); al final.

No entiendo muy bien por qué es necesaria esta operación de descarga.

¿Alguien tiene alguna idea?


"Cuando envía una salida a un flujo, no necesariamente se imprime inmediatamente. Más bien, puede esperar en un búfer hasta que ocurra algún evento no especificado, por ejemplo, un búfer lo suficientemente lleno, lectura desde la entrada o salida del programa. Los detalles pueden variar".

http://www.cs.hmc.edu/~geoff/classes/hmc.cs070.200109/notes/io.html


¿Estás usando std::endl para terminar tus líneas? Esta debería ser la práctica habitual, hasta que los problemas de rendimiento requieran lo contrario, pero por alguna razón, veo mucho código que usa ''/n'' lugar.

De lo contrario, siempre puedes hacer:

std::cout.setf( std::ios_base::unitbuf );

Como una de las primeras cosas en main . Esto provocará una descarga al final de cada << , que es más de lo que necesita, pero para la salida de diagnóstico a la consola, es probablemente bastante aceptable.


¿Los datos que no se están vaciando automáticamente carecen de un /n al final? De forma predeterminada, la salida estándar no se entrega hasta que se ve un retorno de carro.


En C ++ puede usar el formateador endl con el operador cout lugar de flush .



La respuesta de std::endl solo es válida si desea una devolución. No estoy seguro de cómo haría esto si quisiera eliminar un indicador de comandos.


Para agregar a las otras respuestas: sus declaraciones de depuración deben ir a cerr , porque:

  • escribe en el error estándar, lo que significa que, al ejecutar la aplicación, puede separar fácilmente la salida del programa "normal" de la información de errores / depuración a través de la redirección;
  • lo más importante es que la cerr por defecto no tiene búfer , lo que significa que, después de cada operación de salida, se cerr automáticamente y, en general, esto es deseable para los errores y la salida de depuración.

(fuente: estándar de C ++, §27.3.1 ¶4-5, §27.4.2.1.2 tabla 83)