printf
Sintassi:
#include <cstdio> int printf( const char *format, ... );
La funzione printf stampa in output su stdout secondo quanto specificato in format e negli altri argomenti passati alla printf. La stringa format consiste in due tipi di elementi: i caratteri che saranno stampati sullo schermo, e i comandi di formato che definiscono come devono essere stampati gli altri argomenti alla printf. Fondamentalmente, viene specificata una stringa di formato che contiene il testo da stampare oltre a "speciali" caratteri che corrispondono agli altri argomenti alla printf. Per esempio, il seguente codice
char name[20] = "Mario"; int age = 21; printf( "Ciao %s, tu hai %d anni\n", name, age );
visualizza il seguente output:
displays the following output:
Ciao Mario, tu hai 21 anni
La %s significa, "inserisci il primo argomento, una stringa, esattamente qui". La %d indica che il secondo argomento (un intero) deve essere posto lì, dove appare il carattere speciale.
Il valore ritornato dalla printf è il numero di caratteri stampati, oppure un numero negativo in caso di errore.
[modifica] Codici di formattazione
Ci sono diversi codici % per i diversi tipi di variabile, come anche opzioni che limitano la lunghezza delle variabili e cose simili.
| Codice | Formato |
|---|---|
| %c | carattere |
| %d | intero con segno |
| %i | intero con segno |
| %I64d | intero lungo lungo (64-bit integer), specifico per MS |
| %I64u | intero lungo lungo senza segno (64-bit integer), specifico per MS |
| %e | in notazione esponenziale, con una "e" minuscola |
| %E | in notazione esponenziale, con una "E" maiuscola |
| %f | in virgola mobile |
| %g | equivale a %e oppure %f, la più corta delle due |
| %G | equaivale a %E oppure %f, la più corta delle due |
| %o | ottale |
| %s | una stringa di caratteri |
| %u | intero senza segno |
| %x | in esadecimale senza segno, con lettere in minuscolo |
| %X | in esadecimale senza segno, con lettere in maiuscolo |
| %p | un puntatore |
| %n | l'argomento è un puntatore ad un intero nel quale verrà inserito il numero di caratteri scritti fino a questo punto |
[modifica] Modificatori di formattazione
Un intero inserito tra il simbolo % ed il comando di formato agisce come uno specificatore di larghezza minima del campo e provoca il riempimento con spazi o zeri dello spazio necessario a raggiungere la larghezza specificata. Se il riempimento deve avvenire con degli zeri allora bisogna inserire un carattere zero subito prima dello specificatore di larghezza minima:
%012dPuoi anche specificare la larghezza minima del campo in una variabile di tipo intero invece che in un numero; inserisci il carattere *:
int width = 12; int age = 100; printf("%*d", width, age);
Puoi anche inserire un modificatore di precisione, nella forma .N, dove N è un numero decimale, prima del comando di formato:
%012.4dIl modificatore di precisione ha significati diversi, a seconda del comando di formato sul quale agisce:
- Per %e, %E, e %f, il modificatore di precisione consente di specificare il numero di decimali desiderato. Per esempio, %12.6f visualizzerà un numero in virgola mobile di almno 12 cifre, con sei cifre decimali.
- Per %g and %G, il modificatore di precisione determina il numero massimo di cifre significative che saranno visualizzate.
- Per %s, il modificatore di precisione specifica semplicemente la larghezza massima del campo, ed è complementare alla larghezza minima del campo che precede il punto.
Come per lo specificatore di larghezza di campo, anche per il modificatore di precisione è possibile indicare una variabile intera uando il carattere * nella stringa di formato:
const char* msg = "Hello printf"; int string_size = strlen (msg); printf("msg: %.*s", string_size, msg);
Tutto l'output di printf è allineato a destra, a meno che non vengainserito in carattere trattino (il segno aritmetico meno) subito dopo il carattere %. Per esempio il seguente codice:
%-12.4f
visualizzerà un numero in virgola mobile con un minimo di 12 caratteri, 4 posizioni decimali e sarà allineato a sinistra.
E' possibile modificare i comandi di formato %d, %i, %o, %u, e %x anteponendovi le lettere l e h per specificare i tipi di dato long e short (p.es. %hd significa un short int).
I comandi di formato %e, %f, e %g possono avere una lettera l la quale indica che l'argomento è un double (numero in virgola mobile in doppia precisione). I comandi di formato %e, %f, e %g possono essere preceduti dal carattere # per essere sicuri che il punto decimale sia sempre visualizzato, anche se non ci sono cifre significative dopo la virgola.
L'uso del carattere # con il comando di formato %x indica che il numero esadecimale visualizzato deve essere preceduto dai caratteri 0x.
L'uso del carattere # con il comando di formato %o indica che il numero ottale visualizzato deve essere preceduto dal carattere 0.
Inserendo un segno plus + nel comando di formato forzerà l'output a contenere il segno; quindi i numeri positivi saranno preceduti dal segno + (quelli negativi sono semper preceduti dal segno -). Inserendo uno spazio allora l'output dei numeri positivi sarà preceduto da un singolo carattere spazio.
Nella stringa di formato possono anche essere incluse le sequenze di escape costanti.