2013-07-23 15 views
5

Mi chiedevo perché il risultato di questo programma è 5621?printf dà un risultato inaspettato

#include <stdio.h> 

main() 
{ 
    int i=56; 
    printf("%d\n",printf("%d",printf("%d",i))); 
    getch(); 
} 
+0

Compilano anche? 'main' non ha restituito il tipo – StoryTeller

+4

Leggi informazioni su [' printf'] (http://en.cppreference.com/w/c/io/fprintf), e cosa restituisce, e impara a conoscere gli stack, e capirai. –

+2

printf: in caso di successo, restituisce il numero totale di caratteri scritti. – P0W

risposta

22

printf restituisce la quantità di caratteri che ha stampato.

Quindi prima viene chiamato il numero più interno printf con 56, che stampa 56. Quindi restituisce la quantità di caratteri che ha stampato (2) al centro printf, stampando 2. Infine, la quantità di caratteri stampati (1) viene trasferita all'esterno printf, che viene quindi stampata per generare 5621.

1

La funzione printf() restituisce il numero di caratteri che stampa sulla console.

Per esempio, dopo la seguente chiamata printf, num_chars avrà il valore 10 come stringa "Hi haccks\n" consistes di 10 caratteri non nul che verranno stampate su schermo.

num_chars = printf("Hi haccks\n"); 
//     ^^^^^^^^^^
//     12345678910  

Nota: \n è solo 10 ° char. Quindi nel codice sopra riportato il valore restituito da printf assegnato alla variabile num_chars.

Nel codice, in una data dichiarazione, interno printf() stampa i valori e quindi il numero di caratteri che valore stampato da printf esterno tornare come illustrato di seguito:

// 1    2   3 
printf("%d\n", printf("%d", printf("%d",i))); // Here i = 56 
     ^   ^  ^ 
    print: 1  print: 2   print: 56 
    returns: 1  returns: 1  returns: 2 
// 3    2    1  <--Order of printf called 

Quindi uscite 5621

+1

@delnan È stato modificato di nuovo e riformulato per maggiore chiarezza. – gtrig

9

Da il printfman page

valore di ritorno

In caso di esito positivo, queste funzioni restituiscono il numero di caratteri stampati (escluso il byte null utilizzato per terminare l'output alle stringhe ).

56 è stampato per l'interno printf
2 caratteri sono stati stampati così l'argomento al formato successivo %d specificatore è 2
1 carattere è stata stampata dalla metà printf così l'argomento al esterno %d di formato è 1
Solo l'esterno printf include una nuova riga in modo che le chiamate precedenti vengano trasmesse una dopo l'altra sulla stessa riga, fornendo 5621\n.

6

printf() restituisce il numero di caratteri stampati:

printf("%d",i) emette il valore 56.
printf("%d",printf("%d",i)) uscite 56 e quindi 2, il numero di caratteri in 56.
printf("%d\n",printf("%d",printf("%d",i))) uscite 56, quindi 2, quindi il numero di caratteri in 2, che è 1.

6

E 'equivalente a

#include <stdio.h> 

main() 
{ 
    int n, i = 56; 
    n = printf("%d",i); 
    n = printf("%d", n); 
    n = printf("%d\n", n); 
} 

printf restituisce il numero di caratteri scritti.

Problemi correlati