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();
}
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();
}
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.
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
@delnan Es wurde erneut bearbeitet und zur besseren Übersichtlichkeit umformuliert. – gtrig
So Aus die printf
man 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.
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.
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.
Wird es sogar kompiliert? 'main' hat keinen Rückgabetyp – StoryTeller
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. –
printf: Gibt bei Erfolg die Gesamtzahl der geschriebenen Zeichen zurück. – P0W