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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top