La Funzione printf() e l'Output Formattato in C
Argomenti: stdio.h, print formatted, specificatori di formato, sequenze di escape, formattazione decimali, valore di ritorno
La funzione printf() è lo strumento fondamentale del linguaggio C per visualizzare messaggi e dati a schermo. Il suo nome deriva da "print formatted" (stampa formattata), poiché permette di combinare testo fisso e valori di variabili all'interno di un'unica stringa di output.
1. Inclusione e Sintassi Base
Libreria Standard: Includere <stdio.h> e comprendere i parametri
Per utilizzare printf() è necessario includere la libreria di I/O standard in cima al file sorgente tramite la direttiva #include <stdio.h>.
Firma della funzione:
int printf(const char *format, ...);
format: Stringa di testo racchiusa tra doppi apici" "che contiene il messaggio ed i segnaposto (specificatori)....(argomenti variabili): La lista di variabili o valori da inserire in ordine corrispondente ai segnaposto.int(ritorno): Restituisce un numero intero indicante il conteggio dei caratteri stampati con successo.
2. Specificatori di Formato (Segnaposto)
Tipi di Dato: Come inserire i valori delle variabili all'interno del testo
| Specificatore | Tipo di Dato C | Descrizione ed Esempio |
|---|---|---|
%d oppure %i |
int / short |
Stampa numeri interi decimali con segno. |
%f |
float / double |
Stampa numeri decimali in virgola mobile (es. 12.500000). |
%.2f |
float / double |
Formattazione con precisione fissata a 2 cifre decimali (es. 12.50). |
%c |
char |
Stampa un singolo carattere (es. 'A'). |
%s |
Stringa (char[]) |
Stampa una sequenza di caratteri/testo (es. "Ciao"). |
%u / %ld / %lld |
Tipi interi modificati | Specificatori per unsigned, long e long long. |
3. Sequenze di Escape (Caratteri di Controllo)
Controllo Layout: Formattazione dell'andata a capo e spaziatura
Le sequenze di escape sono caratteri di controllo speciali. Vengono scritti con il backslash \ e servono per formattare l'aspetto visivo del testo nel terminale:
\n (Newline - Andata a capo)
Sposta il cursore a capo sulla riga successiva. printf() **non** va a capo automaticamente senza di esso!
\t (Tabulatore)
Inserisce uno spazio largo di tabulazione (di solito 4 o 8 spazi) per allineare verticalmente i dati in colonna.
\" e \ (Escape Apici)
Permettono di stampare i caratteri riservati come le virgolette doppi o il backslash senza interrompere la stringa.
Esempi di effetto visivo nel terminale:
(Newline):
printf("Ciao
Mondo");
Mondo
(Tabulatore):
printf("Nome Voto
Mario 30");
Mario 30
4. Il Valore di Ritorno di printf()
Conteggio Caratteri: Cosa restituisce l'invocazione di printf()
Molti sviluppatori ignorano che printf() restituisce sempre un valore intero (int):
In Caso di Successo
Restituisce un numero intero positivo pari al numero totale di caratteri inviati a schermo. Nel conteggio sono inclusi lettere, cifre, spazi e caratteri speciali come
e .
In Caso di Errore
Se si verifica un errore di scrittura sul dispositivo di output, restituisce un numero negativo (solitamente definito dalla costante EOF, pari a -1).
5. Esempio Pratico Completo
Laboratorio C: Formattazione avanzata e verifica del valore di ritorno
| 1 | #include <stdio.h> |
| 2 | |
| 3 | int main(void) { |
| 4 | int voto = 30; |
| 5 | double prezzo = 19.99; |
| 6 | int caratteriStampati; |
| 7 | |
| 8 | // 1. Stampa formattata con due decimali (%.2f) |
| 9 | printf("Voto: %d | Prezzo: %.2f euro ", voto, prezzo); |
| 10 | |
| 11 | // 2. Salvataggio del valore di ritorno |
| 12 | caratteriStampati = printf("La risposta e' %d. ", 42); |
| 13 | |
| 14 | // 3. Stampa del conteggio restituito |
| 15 | printf("printf ha stampato %d caratteri. ", caratteriStampati); |
| 16 | |
| 17 | return 0; |
| 18 | } |
Analizziamo la stringa "La risposta e' 42.
":
"La risposta e' "➔ 15 caratteri42(conversione di%d) ➔ 2 caratteri.➔ 1 carattere(andata a capo) ➔ 1 carattere
Errore comune da evitare
Assicurati sempre che il numero di specificatori di formato corrisponda esattamente al numero di variabili passate dopo la stringa! Passare meno variabili rispetto ai %d presenti causerà la stampa di valori imprevedibili (spazzatura in memoria).
In sintesi
Argomenti: concetti principali, riepilogo, competenze
- La funzione printf() (print formatted) appartiene a <stdio.h> ed è lo strumento standard per l'output formattato su console.
- Gli specificatori di formato (%d, %f, %c, %s) inseriscono dinamicamente i valori delle variabili all'interno del testo.
- Le sequenze di escape (\n, \t, \") controllano la spaziatura, l'andata a capo ed i caratteri speciali.
- printf() restituisce un numero intero pari al numero totale di caratteri stampati con successo a schermo.
- Compilare stringhe di formato ed associare i corretti specificatori alle variabili.
- Formattare la precisione dei numeri decimali (es. %.2f per due cifre decimali).
- Utilizzare le sequenze di escape per gestire l'andata a capo (\n) e la tabulazione (\t).
- Verificare l'esito della stampa analizzando il valore di ritorno intero di printf().