C Language Specifiers di conversione per la stampa


Esempio

Identificatore di conversione Tipo di argomento Descrizione
i , d int stampa decimale
u int non firmato stampa decimale
o int non firmato stampa ottale
x int non firmato stampa esadecimale, minuscolo
X int non firmato stampa esadecimale, maiuscolo
f Doppio stampa fluttuante con una precisione predefinita di 6, se non viene fornita alcuna precisione (minuscole utilizzate per numeri speciali nan e inf o infinity )
F Doppio stampa fluttuante con una precisione predefinita di 6, se non viene fornita alcuna precisione (maiuscole utilizzate per numeri speciali NAN e INF o INFINITY )
e Doppio le stampe fluttuano con una precisione predefinita di 6, se non viene data alcuna precisione, usando la notazione scientifica usando mantissa / esponente; esponente minuscolo e numeri speciali
E Doppio le stampe fluttuano con una precisione predefinita di 6, se non viene data alcuna precisione, usando la notazione scientifica usando mantissa / esponente; esponente maiuscolo e numeri speciali
g Doppio utilizza o f o e [vedi sotto]
G Doppio usa F o E [vedi sotto]
a Doppio stampa esadecimale, minuscolo
A Doppio stampa esadecimale, maiuscolo
c carbonizzare stampa carattere singolo
s char * stampa una stringa di caratteri fino a un terminatore NUL o troncato a lunghezza data dalla precisione, se specificato
p void * stampa void -pointer value; un void non void dovrebbe essere convertito esplicitamente ("cast") a void* ; puntatore all'oggetto solo, non a un puntatore di funzione
% n / A stampa il carattere %
n int * scrivere il numero di byte stampati finora nel int indicò.

Si noti che i modificatori di lunghezza possono essere applicati a %n (ad esempio %hhn indica che un %hhn conversione n successivo si applica a un puntatore a un argomento signed char , in base alla ISO / IEC 9899: 2011 §7.21.6.1 ¶7).

Si noti che le conversioni in virgola mobile si applicano ai tipi float e double causa delle regole di promozione predefinite - §6.5.2.2 Chiamate di funzione, ¶ 7 La notazione dei puntini di sospensione in un dichiaratore di prototipo di funzione causa l'interruzione della conversione del tipo di argomento dopo l'ultimo parametro dichiarato. Le promozioni degli argomenti predefiniti vengono eseguite sugli argomenti finali. Quindi, funzioni come printf() sono sempre passate solo double valori, anche se la variabile di riferimento è di tipo float .

Con i formati g e G , la scelta tra la notazione e ed f (o E e F ) è documentata nello standard C e nelle specifiche POSIX per printf() :

Il doppio argomento che rappresenta un numero in virgola mobile deve essere convertito nello stile f o e (o nello stile F o E nel caso di un G conversione G ), a seconda del valore convertito e della precisione. Sia P la precisione se non zero, 6 se la precisione è omessa, o 1 se la precisione è zero. Quindi, se una conversione con lo stile E avrebbe un esponente di X :

  • Se P> X> = -4, la conversione deve essere con lo stile f (o F ) e con precisione P - (X+1) .
  • Altrimenti, la conversione deve essere con stile e (o E ) e precisione P - 1 .

Infine, a meno che non sia usato il contrassegno "#", tutti gli zeri finali devono essere rimossi dalla parte frazionaria del risultato e il carattere del punto decimale deve essere rimosso se non è rimasta alcuna parte frazionaria.