% i oder% d zum Drucken von Integer in c mit printf ()?
Ich bin nur zu lernen, C und ich haben ein wenig Kenntnisse in Objective-C durch Dilettantismus in der iOS-Entwicklung, aber in Objective-C war ich mit NSLog(@"%i", x);
zu drucken, die variable x an die Konsole allerdings habe ich gelesen, ein paar C-tutorials und Sie werden sagen, zu verwenden %d
statt %i
.
printf("%d", x);
und printf("%i", x);
print x auf der Konsole richtig.
Diese beiden scheinen, um mich an der gleichen Stelle, so bitte ich die erfahrenen Entwickler, die bevorzugt wird? Ist ein mehr semantisch korrekt oder ist Recht?
InformationsquelleAutor der Frage Dummy Code | 2013-06-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie völlig gleichwertig, wenn verwendet mit
printf()
. Ich persönlich bevorzuge%d
es öfter verwendet (sollte ich sagen: "es ist die idiomatische umwandlungsspezifikator fürint
"?).(Ein Unterschied zwischen
%i
und%d
ist, dass, wenn verwendet mitscanf()
dann%d
erwartet immer eine Dezimalzahl, in der Erwägung, dass%i
erkennt die0
und0x
Präfixe als oktal-und hexadezimal -, aber kein vernünftiger Programmierer verwendetscanf()
sowieso, so dass dies sollte nicht von Belang sein.)InformationsquelleAutor der Antwort
Bin ich nur hinzufügen Beispiel hier, weil ich denke, die Beispiele machen es leichter zu verstehen.
In printf (), Verhalten Sie sich identisch, daher können Sie auch keine %d oder %i. Aber Sie Verhalten sich anders in scanf().
Beispiel:
Ausgabe:
Können Sie sehen, die unterschiedliche Ergebnisse für identische Eingänge.
num
:Lesen wir
num
mit%d
also, wenn wir geben Sie010
es ignoriert die ersten0
und behandelt es als dezimal10
.num2
:Lesen wir
num2
mit%i
.Das heißt, es wird die Behandlung von Dezimalzahlen, octals, und hexadezimal anders.
Wenn es geben
num2
010
sieht es die führenden0
und analysiert Sie als oktal.Wenn wir drucken es mit
%d
es gibt die Dezimalzahl oktal010
die8
.InformationsquelleAutor der Antwort A.s. Bhullar
d
undi
umwandlungsspezifikationen dasselbe Verhalten mitfprintf
Verhalten sich aber unterschiedlich fürfscanf
.Als einige andere schrieben in Ihrer Antwort, die idiomatischen Möglichkeit zum drucken einer
int
ist mitd
umwandlungsspezifikator.Bezüglich
i
Planer undfprintf
C99 Rationale sagt, dass:InformationsquelleAutor der Antwort ouah
%d scheint die norm für den Druck von ganzen zahlen, habe ich nie herausgefunden, warum, Sie Verhalten sich identisch.
InformationsquelleAutor der Antwort Stephan
beide
%d
und%i
können verwendet werden, um drucken Sie eine Ganzzahl%d steht für "dezimal", " und " %i "für" integer." Können Sie %x drucken in hexadezimal, %o drucken in oktal.
Können Sie %ich als synonym für "%d", wenn Sie es vorziehen, um anzuzeigen, "integer" anstelle von "decimal" ist.
Eingabe mit scanf () verwenden, können Sie beides verwenden, %i und %d als gut. %i Mittel analysiert werden, die als ganze Zahl in einer beliebigen Basis (oktal, hexadezimal oder dezimal angezeigt wird, dass 0 oder 0x-prefix), während die %d-Mittel analysiert werden, die als dezimale Ganzzahl.
überprüfen Sie hier für weitere Informationen
warum enthält %d stehen für Integer?
InformationsquelleAutor der Antwort Priyatham51
Als andere sagten, Sie produzieren identische Ausgabe auf printf, aber Verhalten sich anders bei scanf. Ich würde lieber
%d
über%i
aus diesem Grund. Eine Zahl, die gedruckt wird mit%d
gelesen werden kann, mit%d
und Sie erhalten die gleiche Nummer. Das ist nicht immer wahr mit%i
wenn Sie jemals entscheiden, Sie zu nutzen null Polsterung. Weil es üblich ist, kopieren printf-format-strings in scanf format strings, die ich vermeiden würde%i
da es könnte Ihnen eine überraschende bug Einleitung:Schreibe ich
fprintf("%i ...", ...);
Kopieren Sie und schreiben
fscanf(%i ...", ...);
Ich entscheiden, will ich richten Sie Spalten mehr schön und machen alphabetization Verhalten sich genauso wie-Sortierung:
fprintf("%03i ...", ...);
(oder%04d
)Nun, wenn Sie Lesen, meine zahlen, alles zwischen 10 und 99 ist in oktal interpretiert. Oops.
Wenn Sie möchten, decimal Formatierung, sagen Sie einfach so.
InformationsquelleAutor der Antwort David Roundy