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) %ozu drucken . Eine ganze Zahl könnte in einer dieser Basen liegen.
In printf()können Sie %ials Synonym für verwenden %d, wenn Sie "Ganzzahl" anstelle von "Dezimal" angeben möchten, dies wird jedoch %dim Allgemeinen bevorzugt, da es spezifischer ist.
Bei der Eingabe verwenden scanf(), können Sie verwenden beide verwenden %iund %dauch. %ibedeutet, dass es als Ganzzahl in einer beliebigen Basis (oktal, hexadezimal oder dezimal, wie durch ein 0oder ein 0xPräfix angegeben) %danalysiert 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, %iwenn die Eingabebasis vom Präfix abhängen soll. wenn die Eingangsbasis fixiert werden soll, sollten Sie verwenden %d, %xoder %o. Insbesondere die Tatsache, dass ein Leading 0Sie in den Oktalmodus versetzt, kann Sie einholen.