2013-10-09 12 views
6

Quando eseguo il programma di seguito, non ottengo alcun output.comportamento insolito con printf con ciclo while infinito

#include <stdio.h> 

int main() 
{ 
    printf("hello"); 
    while(1) 
    { 

    } 
    return 0; 
} 

mentre se modifico il comando printf per aggiungere un carattere '\ n' alla fine della stringa, quindi i risultati attesi viene. cosa sta succedendo nel primo codice? Semplicemente non riesco a capirlo.

+0

chiama 'fflush (stdout)' btw hai un ciclo infinito. –

+3

L'output è memorizzato nel buffer. Hai bisogno di un '\ n' alla fine della stringa per farla stampare, o usare' fflush (stdout) 'dopo il tuo' printf' come suggerito da @GrijeshChauhan. Ci sono altre operazioni che svuotano anche il buffer di output, come una funzione di input ('getchar' o' scanf') ma non è chiaro dallo snippet di codice che cosa sta facendo il tuo ciclo. – lurker

+0

possibile duplicato di [Perché il programma non esegue l'istruzione printf finale?] (Http://stackoverflow.com/questions/11277796/why-does-program-not-execute-final-printf-statement) – lurker

risposta

10

Questo perché stdout è linea tamponata, cioè l'uscita non viene scritto nel dispositivo (terminale) fino ad una linea completa è stato raccolto .

È possibile chiamare fflush(stdout); per forzare un flush del buffer al terminale. Non provare a sciacquare stdin a proposito, non è permesso.

+0

ok ma perché il codice funziona senza il loop infinito e con la stessa printf di cui sopra? – DesirePRG

+0

+1 per indicare di non eseguire questa operazione con stdin – fayyazkl

+3

Quando il programma termina poco dopo, l'os eliminerebbe definitivamente il buffer di output piuttosto che la richiesta di flush e il programma in corso. – fayyazkl

2

prova

printf("hello\n"); 

o

printf("hello"); 
fflush(stdout) 
+0

È necessario indicare che il 'fflush (stdout)' si verifica subito dopo 'printf'. – lurker

+0

@mbratch True. Ho curato, grazie. –

0

Si dovrebbe stampare una nuova riga alla fine dell'output. Altrimenti invocherà un comportamento indefinito (almeno potenzialmente indefinito).

+1

Cosa intendi per "invocare un comportamento (potenzialmente) indefinito"? –

0

Usa printf("hello\n");

Per maggiori informazioni vedere le risposte alle this question.

Problemi correlati