Domanda
L'ho cercato un po' ma non ho ottenuto una risposta particolarmente diretta.In C (e immagino C++), come si determina cosa viene dopo il % durante l'utilizzo printf
?.Per esempio:
double radius = 1.0;
double area = 0.0;
area = calculateArea( radius );
printf( "%10.1f %10.2\n", radius, area );
Ho preso questo esempio direttamente da un libro che ho sul linguaggio C.Questo non ha affatto senso per me.Dove ti viene in mente? 10.1f
E 10.2f
?Qualcuno potrebbe spiegarlo?
Soluzione
http://en.wikipedia.org/wiki/Printf#printf_format_placeholders è il riferimento di Wikipedia per i segnaposto di formato in printf. http://www.cplusplus.com/reference/clibrary/cstdio/printf.html è anche utile
Fondamentalmente in una forma semplice è %[larghezza].[precisione][tipo].La larghezza consente di assicurarsi che la variabile da stampare abbia almeno una certa lunghezza (utile per tabelle, ecc.).Precisione consente di specificare la precisione con cui viene stampato un numero (ad es.cifre decimali ecc.) e informa C/C++ qual è la variabile che gli hai fornito (carattere, numero intero, doppio ecc.).
Spero che questo ti aiuti
AGGIORNAMENTO:
Per chiarire usando i tuoi esempi:
printf( "%10.1f %10.2\n", radius, area );
%10.1f (riferito al primo argomento:raggio) significa renderlo lungo 10 caratteri (es.pad con spazi) e stamparlo come float con una cifra decimale.
%10.2 (riferito al secondo argomento:area) significa renderlo lungo 10 caratteri (come sopra) e stampare con due cifre decimali.
Altri suggerimenti
man 3 printf
su un sistema Linux ti fornirà tutte le informazioni di cui hai bisogno.È inoltre possibile trovare queste pagine di manuale online, ad esempio all'indirizzo http://linux.die.net/man/3/printf
10.1f significa virgola mobile con 1 cifra dopo la virgola e 10 cifre prima della virgola.Se il numero ha meno di 10 cifre, viene riempito con spazi.10.2f è lo stesso, ma con 2 cifre dopo la virgola.
Su ogni sistema che ho visto, da Unix a Rails Migrations, non è così.@robintw lo esprime al meglio:
Fondamentalmente in una forma semplice è %[larghezza].[precisione][tipo].
Cioè, non "10 posti Prima il punto decimale", ma "10 cifre, sia prima che dopo, compreso il punto decimale."
10.1f significa virgola mobile con 10 caratteri di larghezza con 1 cifra dopo il punto decimale.Se il numero ha meno di 10 cifre, viene riempito con spazi.10.2f è lo stesso, ma con 2 cifre dopo la virgola.
Hai questi tipi base:
%d - integer
%x - hex integer
%s - string
%c - char (only one)
%f - floating point (float)
%d - signed int (decimal)
%i - signed int (integer) (same as decimal).
%u - unsigned int
%ld - long (signed) int
%lu - long unsigned int
%lld - long long (signed) int
%llu - long long unsigned int
Modificare:ce ne sono molti altri elencati nella risposta di @Eli (man 3 printf).
In breve, quei valori dopo la percentuale dicono printf
come interpretare (o produrre) tutte le variabili che verranno successivamente.Nel tuo esempio, radius
viene interpretato come un float (questa è la 'f'), e il 10.1
fornisce informazioni su quante cifre decimali utilizzare durante la stampa.
Vedere questo link per maggiori dettagli su tutti i modificatori che puoi utilizzare con printf.
10.1f significa che vuoi visualizzare a Fmolto con 1 decimale e il numero visualizzato dovrebbe essere 10 caratteri lunghi.
Le pagine man contengono le informazioni desiderate.Per leggere quello che hai sopra:
printf( "%10.2f", 1.5 )
Questo stamperà:
1.50
Mentre:
printf("%.2f", 1.5 )
Stampe:
1.50
Nota la giustificazione di entrambi.Allo stesso modo:
printf("%10.1f", 1.5 )
Stamperebbe:
1.5
Qualsiasi numero dopo .è la precisione che desideri stampare.Qualsiasi numero prima di .è la distanza dal margine sinistro.
Una questione che non è stata sollevata da altri è se Doppio è lo stesso di a galleggiante.Su alcuni sistemi era necessario uno specificatore di formato diverso per double rispetto a float.Anche perché i parametri passati potrebbero essere di dimensioni diverse.
%f - float %lf - double %g - double