Se o seu programa estiver usando as funções de saída padrão (por exemplo, puts
, printf
e amigos de stdio.h
em C, cout << …
em C ++, print
em muitas linguagens de alto nível), sua saída é buffer : os caracteres se acumulam em uma zona de memória que é chamada de buffer; quando há muitos dados no buffer, o conteúdo do buffer é impresso (é "liberado") e o buffer fica vazio (pronto para ser preenchido novamente). Se o seu programa não produzir muito resultado, ele pode não ter preenchido seu buffer ainda.
Quando você mata seu programa com Ctrl + C , a menos que você tenha configurado um manipulador de sinal para SIGINT , apenas morre. O conteúdo de qualquer buffer não liberado é perdido.
Você tem três possibilidades:
- Grave um manipulador de sinal para o SIGINT que libera o buffer de saída (
fflush(stdout)
oufflush(NULL)
para liberar todos os buffers). - Defina seu programa para não armazenar em buffer sua saída: chame
setvbuf(stdout, NULL, _IONBF, 0)
. (Veja C equivalente a autoflush (flush stdout após cada gravação)? ) - Execute seu programa em um ambiente que finge ser um terminal, para que nenhum buffer ocorra. Consulte Desativar o buffer no tubo