printf non stampa sullo schermo

Se provo a eseguire il seguente codice semplice sotto Cygwin su Windows 7,

#include  int main() { int i1, i2, sums; printf( "Enter first integer\n" ); scanf( "%d", &i1 ); printf( "Enter second integer\n" ); scanf( "%d", &i2 ); sums = i1 + i2; printf( "Sum is %d\n", sums ); return 0; } 

compila (via gcc) senza problemi, ma quando provo ad eseguirlo, la prima istruzione (“Inserisci il primo numero intero”) non viene stampata sul terminale, e devo inserire due numeri successivi (es. 3 e 4) prima di arrivare,

 3 4 Enter first integer Enter second integer Sum is 7 

Qualcuno può spiegarmi cosa sta succedendo qui. Funziona perfettamente bene con MinGW.

Come @thejh ha detto che il tuo stream sembra essere bufferizzato. I dati non sono ancora stati scritti nella sequenza controllata.

Invece di giocherellare con l’impostazione del buffer, è ansible chiamare fflush dopo ogni scrittura per trarre profitto dal buffer e comunque applicare esplicitamente il comportamento / la visualizzazione desiderati.

 printf( "Enter first integer\n" ); fflush( stdout ); scanf( "%d", &i1 ); 

puoi provare a disabilitare il buffering in stdout usando

 setbuf(stdout, NULL); 

Sembra che l’output del tuo programma sia bufferizzato. Prova ad abilitare il buffering di linea in modo esplicito:

 setlinebuf(stdout);