2012-11-16 6 views
65

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?

+18

La mia ipotesi migliore è decimale –

+0

Sì, tuttavia, questo è un po 'ironico, una domanda interessante. – Daniel

+0

Anche se non è una vera domanda di programmazione, e tendo a chiuderle :) –

risposta

83

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.

+0

Grazie per aver spiegato perché% i agisce come fa. – clementine

7

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.)