+L'ultima modalità di input/output è quella formattata, che è una delle
+caratteristiche più utilizzate delle librerie standard del C; in genere
+questa è la modalità in cui si esegue normalmente l'output su terminale
+poichè permette di stampare in maniera facile e veloce dati, tabelle e
+messaggi.
+
+L'output formattato viene eseguito con una delle 13 funzioni della
+famiglia \func{printf}; le tre più usate sono le seguenti:
+\begin{functions}
+ \headdecl{stdio.h}
+ \funcdecl{int printf(const char *format, ...)} Stampa su \var{stdout}
+ gli argomenti, secondo il formato specificato da \param{format}.
+
+ \funcdecl{int fprintf(FILE *stream, const char *format, ...)} Stampa
+ su \param{stream} gli argomenti, secondo il formato specificato da
+ \param{format}.
+
+ \funcdecl{int sprintf(char *str, const char *format, ...)} Stampa
+ sulla stringa \param{str} gli argomenti, secondo il formato
+ specificato da \param{format}.
+
+ \bodydesc{Le funzioni ritornano il numero di caratteri stampati.}
+\end{functions}
+\noindent le prime due servono per stampare su file (lo standard output
+o quello specificato) la terza permette di stampare su una stringa, in
+genere l'uso di \func{sprintf} è sconsigliato in quanto è possibile, se
+non si ha la sicurezza assoluta sulle dimensioni del risultato della
+stampa, eccedere le dimensioni di \param{str}; per questo motivo si
+consiglia l'uso dell'alternativa:
+\begin{prototype}{stdio.h}
+{snprintf(char *str, size\_t size, const char *format, ...);}
+ Identica a \func{sprintf}, ma non scrive su \param{str} più di
+ \param{size} caratteri.
+\end{prototype}
+
+La parte più complessa di queste funzioni è il formato della stringa
+\param{format} che indica le conversioni da fare, da cui poi deriva il numero
+dei parametri che dovranno essere passati a seguire. La stringa è costituita
+da caratteri normali (tutti eccetto \texttt{\%}), che vengono passati
+invariati all'output, e da direttive di conversione, in cui devono essere
+sempre presenti il carattere \texttt{\%}, che introduce la direttiva, ed uno
+degli specificatori di conversione (riportati in \ntab) che la conclude.
+
+\begin{table}[htb]
+ \centering
+ \begin{tabular}[c]{|l|l|p{10cm}|}
+ \hline
+ \textbf{Valore} & \textbf{Tipo} & \textbf{Significato} \\
+ \hline
+ \hline
+ \cmd{\%d} &\type{int} & Stampa un numero intero in formato decimale
+ con segno \\
+ \cmd{\%i} &\type{int} & Identico a \cmd{\%i} in output, \\
+ \cmd{\%o} &\type{unsigned int}& Stampa un numero intero come ottale\\
+ \cmd{\%u} &\type{unsigned int}& Stampa un numero intero in formato
+ decimale senza segno \\
+ \cmd{\%x},
+ \cmd{\%X} &\type{unsigned int}& Stampano un intero in formato esadecimale,
+ rispettivamente con lettere minuscole e
+ maiuscole. \\
+ \cmd{\%f} &\type{unsigned int}& Stampa un numero in virgola mobile con la
+ notazione a virgola fissa \\
+ \cmd{\%e},
+ \cmd{\%E} &\type{double} & Stampano un numero in virgola mobile con la
+ notazione esponenziale, rispettivamente con
+ lettere minuscole e maiuscole. \\
+ \cmd{\%g},
+ \cmd{\%G} &\type{double} & Stampano un numero in virgola mobile con la
+ notazione più appropriate delle due precedenti,
+ rispettivamente con lettere minuscole e
+ maiuscole. \\
+ \cmd{\%a},
+ \cmd{\%A} &\type{double} & Stampano un numero in virgola mobile in
+ notazione esadecimale frazionaria\\
+ \cmd{\%c} &\type{int} & Stampa un carattere singolo\\
+ \cmd{\%s} &\type{char *} & Stampa una stringa \\
+ \cmd{\%p} &\type{void *} & Stampa il valore di un puntatore\\
+ \cmd{\%n} &\type{\&int} & Prende il numero di caratteri stampati finora\\
+ \cmd{\%\%}& & Stampa un \% \\
+ \hline
+ \end{tabular}
+ \caption{Valori possibili per gli specificatori di conversione in una
+ stringa di formato di \func{printf}.}
+ \label{tab:file_format_spec}
+\end{table}
+
+
+Il formato di una direttiva di conversione prevede una serie di possibili
+elementi opzionali oltre al \cmd{\%} e allo specificatore di conversione; in
+generale essa è sempre del tipo:
+\begin{center}
+\begin{verbatim}
+% [n. parametro $] [flag] [[larghezza] [. precisione]] [tipo] conversione
+\end{verbatim}
+\end{center}
+in cui i valori opzionali sono indicati fra parentesi, e prevedono la
+presenza, in questo ordine, di: uno specificatore per il parametro da usare
+(terminato da un \cmd{\$}, uno o più flag (riassunti in
+\tabref{tab:file_format_flag}) che controllano il formato di stampa della
+conversione (riassunti in \tabref{tab:file_format_type}), uno specificatore di
+larghezza, eventualmente seguito (per i numeri in virgola mobile) da un
+specificatore di precisione, uno specificatore del tipo di dato (che ne indica
+la lunghezza).
+
+\begin{table}[htb]
+ \centering
+ \begin{tabular}[c]{|l|p{10cm}|}
+ \hline
+ \textbf{Valore} & \textbf{Significato}\\
+ \hline
+ \hline
+ \cmd{\#} & \\
+ \cmd{0} & \\
+ \cmd{-} & \\
+ \cmd{' '} & \\
+ \cmd{+} & \\
+ \hline
+ \end{tabular}
+ \caption{I valori dei flag per il formato di \func{printf}}
+ \label{tab:file_format_flag}
+\end{table}
+
+
+
+\begin{table}[htb]
+ \centering
+ \begin{tabular}[c]{|l|p{10cm}|}
+ \hline
+ \textbf{Valore} & \textbf{Significato} \\
+ \hline
+ \hline
+ \cmd{hh} & \\
+ \cmd{h} & \\
+ \cmd{l} & \\
+ \cmd{ll} & \\
+ \cmd{L} & \\
+ \cmd{q} & \\
+ \cmd{j} & \\
+ \cmd{z} & \\
+ \cmd{t} & \\
+ \hline
+ \end{tabular}
+ \caption{Il modificatore di tipo di dato per il formato di \func{printf}}
+ \label{tab:file_format_type}
+\end{table}
+
+
+
+