Ich weiß, das klingt nicht produktiv, aber ich suche nach einer Möglichkeit, mir alle Formatierungscodes für zu merken printf
Anrufe. %s
, %p
, %f
sind alle offensichtlich, aber ich kann nicht verstehen wo %d
kommt von. Ist %i
schon von etwas anderem belegt?
Warum steht %d für Integer?
Brian Campell
Es steht für “Dezimal” (Basis 10), nicht “Integer”. Sie können verwenden %x
einzudrucken hexadezimal (Basis 16) und %o
einzudrucken oktal (Basis 8). Eine ganze Zahl könnte in jeder dieser Basen stehen.
Im printf()
können Sie verwenden %i
als Synonym für %d
wenn Sie lieber “Integer” statt “Dezimal” angeben möchten, aber %d
wird im Allgemeinen bevorzugt, da es spezifischer ist.
Bei der Eingabe mit scanf()
Sie können beide verwenden %i
und %d
auch. %i
bedeutet, es als Ganzzahl mit beliebiger Basis zu analysieren (oktal, hexadezimal oder dezimal, wie durch a angegeben 0
oder 0x
Präfix), während %d
bedeutet, es als Dezimalzahl zu analysieren.
Hier ist ein Beispiel für alle in Aktion:
#include <stdio.h>
int main() {
int out = 10;
int in[4];
printf("%d %i %x %o\n", out, out, out, out);
sscanf("010 010 010 010", "%d %i %x %o", &in[0], &in[1], &in[2], &in[3]);
printf("%d %d %d %d\n", in[0], in[1], in[2], in[3]);
sscanf("0x10 10 010", "%i %i %i", &in[0], &in[1], &in[2]);
printf("%d %d %d\n", in[0], in[1], in[2]);
return 0;
}
Sie sollten also nur verwenden %i
wenn Sie möchten, dass die Eingabebasis vom Präfix abhängt; wenn die Eingabebasis fest sein soll, sollten Sie verwenden %d
, %x
oder %o
. Insbesondere die Tatsache, dass eine führende 0
versetzt Sie in den Oktalmodus, kann Sie einholen.
http://en.wikipedia.org/wiki/Printf_format_string scheint zu sagen, dass es für Dezimalzahlen ist, wie ich vermutet hatte
d,i
int als vorzeichenbehaftete Dezimalzahl. ‘%d’ und ‘%i’ sind Synonyme für die Ausgabe, unterscheiden sich jedoch, wenn sie mit scanf() für die Eingabe verwendet werden (die Verwendung von %i interpretiert eine Zahl als hexadezimal, wenn ihr 0x vorangestellt ist, und als oktal, wenn ihr eine 0 vorangestellt ist.)
Meine beste Vermutung ist dezimal
– Ruan Mendes
16. November 2012 um 1:21 Uhr
Ja, aber das ist irgendwie ironisch +1, interessante Frage.
– Daniel
16. November 2012 um 1:21 Uhr
Obwohl es keine echte Programmierfrage ist und ich dazu neige, diese zu schließen 🙂
– Ruan Mendes
16. November 2012 um 1:22 Uhr
„d“ steht für „Does stand for integer“. Leicht genug.
– Einsames Boot
16. November 2012 um 15:27 Uhr