2013-07-23 18 views
5

Ich habe mich gefragt, warum das Ergebnis dieses Programms 5621 ist?printf gibt unerwartetes Ergebnis

#include <stdio.h> 

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

Wird es sogar kompiliert? 'main' hat keinen Rückgabetyp – StoryTeller

+4

Lesen Sie über [' printf'] (http://en.cppreference.com/w/c/io/fprintf), und was es zurückgibt, und lernen Sie über Stapel, und Sie werden verstehen. –

+2

printf: Gibt bei Erfolg die Gesamtzahl der geschriebenen Zeichen zurück. – P0W

Antwort

22

printf gibt die Anzahl der gedruckten Zeichen zurück.

Also zuerst die innerste printf ruft mit 56, Drucken 56. Dann gibt es die Anzahl der Zeichen, die es gedruckt hat (2) in die Mitte printf, Drucken 2. Dann wird schließlich die Anzahl der gedruckten Zeichen (1) in die äußere printf übergeben, die dann gedruckt wird, um 5621 zu produzieren.

1

Die printf() Funktion gibt die Anzahl der Zeichen, die es auf der Konsole ausgibt.

Zum Beispiel wird nach dem folgenden printf-Aufruf num_chars den Wert 10 als Zeichenfolge haben "Hi haccks\n" besteht aus 10 Nicht-Null-Zeichen, die auf dem Bildschirm gedruckt werden.

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

Hinweis: \n ist Single 10 th char. Also im obigen Code zurückgegebenen Wert von printf num_chars Variable zugewiesen.

in Ihrem Code in der gegebenen Anweisung, druckt innere printf() die Werte und dann Anzahl der Zeichen zurück, die durch äußere printf aufgedruckten Wert wie unten dargestellt:

// 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 

es gibt 5621

+1

@delnan Es wurde erneut bearbeitet und zur besseren Übersichtlichkeit umformuliert. – gtrig

9

So Aus die printfman page

Rückgabewert

Bei erfolgreicher Rückgabe geben diese Funktionen die Anzahl der gedruckten Zeichen zurück (mit Ausnahme des Nullbytes, das zum Beenden der Ausgabe an Zeichenfolgen verwendet wird).

56 wird für die inneren printf gedruckten
2 Zeichen gedruckt wurden, so das Argument auf die nächste %d Formatspezifizierer ist 2
1 Zeichen durch die mittlere printf gedruckt wurde so das Argument zu dem äußeren %d Format Spezifizierer 1
Nur die äußere printf enthält eine neue Zeile, so dass die vorhergehenden Anrufe nacheinander auf derselben Zeile ausgegeben werden, was 5621\n ergibt.

6

printf() gibt die Anzahl der gedruckten Zeichen:

printf("%d",i) gibt den Wert 56.
printf("%d",printf("%d",i)) Ausgänge 56 und dann 2, die Anzahl der Zeichen in 56.
printf("%d\n",printf("%d",printf("%d",i))) Ausgänge 56, dann 2, dann die Anzahl der Zeichen in 2, die 1 ist.

6

Es ist äquivalent zu

#include <stdio.h> 

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

printf gibt die Anzahl der geschriebenen Zeichen.

Verwandte Themen