So che questo non sembra produttivo, ma sto cercando un modo per ricordare tutti i codici di formattazione per le chiamate printf
. %s
, %p
, %f
sono tutti ovvi, ma non riesco a capire da dove proviene %d
. %i
è già utilizzato da qualcos'altro?perché% d sta per Integer?
risposta
Rappresenta "decimal" (base 10), non "intero". È possibile utilizzare %x
per stampare in hexadecimal (base 16) e %o
per stampare in octal (base 8). Un numero intero potrebbe essere in una di queste basi.
In printf()
, è possibile utilizzare %i
come sinonimo di %d
, se si preferisce indicare "integer" invece di "decimali", ma %d
è generalmente preferita in quanto è più specifico.
All'ingresso, utilizzando scanf()
, è possibile utilizzare sia %i
sia %d
. %i
significa analizzarlo come un numero intero in qualsiasi base (ottale, esadecimale o decimale, come indicato da un prefisso 0
o 0x
), mentre %d
significa analizzarlo come un intero decimale.
Ecco un esempio di tutti loro in azione:
#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;
}
Quindi, si dovrebbe utilizzare solo %i
se si desidera che la base di ingresso a dipendere prefisso; se la base di input deve essere fissa, è necessario utilizzare %d
, %x
o %o
. In particolare, il fatto che un leader 0
ti mette in modalità ottale può farti prendere.
Grazie per aver spiegato perché% i agisce come fa. – clementine
http://en.wikipedia.org/wiki/Printf_format_string sembra dire che è per decimali come avevo intuito
d,i
int come numero decimale con segno. '% d' e '% i' sono sinonimi per l'output , ma sono diversi se usati con scanf() per l'input (utilizzando% i interpreterà un numero come esadecimale se preceduto da 0x e ottale se preceduto da 0.)
La mia ipotesi migliore è decimale –
Sì, tuttavia, questo è un po 'ironico, una domanda interessante. – Daniel
Anche se non è una vera domanda di programmazione, e tendo a chiuderle :) –