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();
}
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();
}
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
.
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
@delnan È stato modificato di nuovo e riformulato per maggiore chiarezza. – gtrig
Da il printf
man 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
.
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
.
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.
Compilano anche? 'main' non ha restituito il tipo – StoryTeller
Leggi informazioni su [' printf'] (http://en.cppreference.com/w/c/io/fprintf), e cosa restituisce, e impara a conoscere gli stack, e capirai. –
printf: in caso di successo, restituisce il numero totale di caratteri scritti. – P0W