printf

Da cppreference.com.
< cpp | io | c

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:

     %012d

Puoi 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.4d

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

Argomenti correlati: fprintf, puts, scanf, sprintf

Strumenti personali
Namespace
Varianti
Azioni
Navigazione
Strumenti