Ich weiß, dass dies nicht produktiv klingt, aber ich suche nach einer Möglichkeit, alle Formatierungscodes für printf
Anrufe zu speichern. %s
, %p
, %f
Sind offensichtlich, aber ich kann nicht verstehen , wo %d
herkommt. Wird %i
schon von etwas anderem genommen?
c
formatting
printf
grasingerm
quelle
quelle
Antworten:
Es steht für " dezimal " (Basis 10), nicht für "ganze Zahl". Sie können verwenden
%x
, um hexadezimal (Basis 16) und oktal (Basis 8)%o
zu drucken . Eine ganze Zahl könnte in einer dieser Basen liegen.In
printf()
können Sie%i
als Synonym für verwenden%d
, wenn Sie "Ganzzahl" anstelle von "Dezimal" angeben möchten, dies wird jedoch%d
im Allgemeinen bevorzugt, da es spezifischer ist.Bei der Eingabe verwenden
scanf()
, können Sie verwenden beide verwenden%i
und%d
auch.%i
bedeutet, dass es als Ganzzahl in einer beliebigen Basis (oktal, hexadezimal oder dezimal, wie durch ein0
oder ein0x
Präfix angegeben)%d
analysiert wird , während bedeutet, dass es als dezimale Ganzzahl analysiert wird.Hier ist ein Beispiel von allen 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 daher nur verwenden,
%i
wenn die Eingabebasis vom Präfix abhängen soll. wenn die Eingangsbasis fixiert werden soll, sollten Sie verwenden%d
,%x
oder%o
. Insbesondere die Tatsache, dass ein Leading0
Sie in den Oktalmodus versetzt, kann Sie einholen.quelle
http://en.wikipedia.org/wiki/Printf_format_string scheint zu sagen, dass es sich um eine Dezimalzahl handelt, wie ich vermutet hatte
d,i
quelle