Sous Mac OS X,
tout comme sous Windows, la console communique avec l'utilisateur au travers de flux standards (
stdin pour l'entrée au clavier,
stdout pour la sortie des textes à l'écran,
strerr pour la sortie des textes d'erreur, tous manipulés par les fonctions définis dans
<stdio.h>).
Or, ces flux transitent souvent par défaut par un tampon mémoire (buffer) de sorte que les données n'atteignent leur destination finale qu'en certains moments opportuns, et en une seule fois.
Dans le cas présent, le programme remplit le tampon de sortie, mais sans que les données n'apparaissent encore à l'écran parce que l'événement qui provoque leur affichage n'est pas encore survenu.
Pour que les données apparaissent en cours de traitement, le plus simple est de provoquer le vidage normal mais
anticipé du tampon, en utilisant la fonction standard
fflush() qui est également définie dans
<stdio.h>. On peut faire
fflush(sdtout) ou bien
fflush(0) avant de lancer
sleep() :
Bloc de code:
[COLOR="DarkRed"]#include <stdio.h>
#ifdef WIN32
[COLOR="Green"]// Ici déclarations spécifiques Windows
[/COLOR] #include "windows.h"
[COLOR="Green"] // Attente (en secondes), utilise Sleep (en millisecondes)
[/COLOR] #define sleep(t) Sleep(1000*(t))
#else
[COLOR="Green"]// Ici déclarations POSIX (Mac et autres Unix)
[/COLOR] #include <unistd.h>
#endif[/COLOR]
[COLOR="SlateGray"]...[/COLOR]
printf( [COLOR="SlateGray"]...[/COLOR] );
fflush( stdout );
sleep( [COLOR="Navy"]1[/COLOR] );