- Formattare l'output con gli specificatori di printf.
- Leggere valori int e float da tastiera con scanf.
- Spiegare perché scanf richiede l'operatore &.
- Scrivere programmi che chiedono dati, li elaborano e mostrano il risultato.
Output formattato con printf
Funzione: printf | Libreria: stdio.h
| Specificatore | Tipo | Esempio | Risultato |
|---|---|---|---|
%d | int | printf("%d", 42) | 42 |
%f | float / double | printf("%f", 3.5) | 3.500000 |
%.2f | decimali fissi | printf("%.2f", 3.14159) | 3.14 |
%5d | larghezza minima 5 | printf("%5d", 42) | 42 |
%c | char | printf("%c", 'A') | A |
%s | stringa | printf("%s", "ciao") | ciao |
%% | simbolo % | printf("%d%%", 50) | 50% |
% bisogna scriverlo due volte.Input da tastiera con scanf
Funzione: scanf | Novità: operatore &
scanf legge ciò che l'utente digita e lo scrive in una variabile. Di solito si stampa prima un messaggio con printf per dire all'utente che cosa inserire.
#include <stdio.h>
int main(void)
{
int a, b;
printf("Inserisci il primo numero: ");
scanf("%d", &a);
printf("Inserisci il secondo numero: ");
scanf("%d", &b);
printf("%d + %d = %d\n", a, b, a + b);
return 0;
}Inserisci il primo numero: 7
Inserisci il secondo numero: 5
7 + 5 = 12Nell'esempio l'utente digita 7 e 5: i numeri compaiono accanto ai messaggi perché il terminale mostra ciò che viene scritto. Il programma si ferma a ogni scanf finché l'utente non preme Invio.

scanf deve modificare la variabile, quindi non basta il suo valore: riceve il suo indirizzo in memoria, che si ottiene con &. Senza & il programma è sbagliato. Capiremo a fondo il meccanismo nell'unità sui puntatori.| Tipo della variabile | Specificatore di scanf | Nota |
|---|---|---|
int | %d | |
float | %f | |
double | %lf | attenzione: diverso da printf, che usa %f |
char | %c | lo spazio prima di %c salta gli a capo rimasti da una lettura precedente |
Un secondo esempio, con numeri decimali:
#include <stdio.h>
int main(void)
{
float v1, v2, media;
printf("Primo voto: ");
scanf("%f", &v1);
printf("Secondo voto: ");
scanf("%f", &v2);
media = (v1 + v2) / 2;
printf("Media: %.2f\n", media);
return 0;
}Primo voto: 7.5
Secondo voto: 8
Media: 7.75scanf non legge nulla e la variabile conserva il valore precedente. Più avanti vedremo come controllare il valore restituito da scanf. Con alcune opzioni di compilazione (per esempio -O2) il compilatore può segnalare che quel valore viene ignorato: per ora puoi trascurare l'avviso.Laboratorio guidato — Area e perimetro di un rettangolo
Obiettivo: scrivere un programma completo: chiede due dati, li elabora e stampa il risultato.
Software: VS Code, gcc, terminale. Tempo previsto: 25 minuti.
Prerequisiti: lezioni precedenti completate.
Procedura passo passo
- Crea il file
rettangolo.ccon lo scheletro del programma (#include,main,return 0;). - Dentro
maindichiara quattro variabilifloat:base,altezza,area,perimetro. - Con
printfchiedi la base, poi leggila conscanf("%f", &base);. Ripeti per l'altezza. - Calcola
area = base * altezza;eperimetro = 2 * (base + altezza);. - Stampa i due risultati con
%.2f, ciascuno su una riga. - Compila ed esegui inserendo
5.5e2. - Riesegui con altri valori (per esempio
3e4) e verifica a mano i risultati. - Prova guidata dell'errore: togli una
&da unascanfe compila: leggi il warning, poi rimetti il simbolo.
Base: 5.5
Altezza: 2
Area: 11.00
Perimetro: 15.00Con base 3 e altezza 4 ottieni Area: 12.00 e Perimetro: 14.00.
Verifica del risultato
| Controllo | Che cosa devi riconoscere |
|---|---|
| Domande | Il programma chiede base e altezza prima di leggerle. |
| Area | Prodotto dei due valori, con due decimali. |
| Perimetro | Doppio della somma dei due lati, con due decimali. |
- Area e perimetro valgono 0.00 o hanno valori strani: controlla
&e che lo specificatore sia%f. - Hai scritto
5,5con la virgola:scanflegge solo il 5. Usa il punto decimale. - Il messaggio e il numero digitato compaiono sulla stessa riga: è normale, perché il messaggio non termina con
\n. - Con una
&mancante il compilatore avvisa con un warning e il programma, se eseguito, di solito si interrompe con un errore.
Esercizio autonomo
Scrivi media.c: legge due voti decimali e stampa la loro media con due decimali.
Primo voto: 7.5
Secondo voto: 8
Media: 7.75Soluzione (da aprire solo dopo aver provato)
#include <stdio.h>
int main(void)
{
float v1, v2, media;
printf("Primo voto: ");
scanf("%f", &v1);
printf("Secondo voto: ");
scanf("%f", &v2);
media = (v1 + v2) / 2;
printf("Media: %.2f\n", media);
return 0;
}Verifica dei concetti
Tipo: autovalutazione | Argomento: printf e scanf
- Che cosa stampa
printf("%.1f", 2.46);? - Perché in
scanf("%d", &a);serve il simbolo&? - Quale specificatore di
scanfserve per leggere undouble? - Come si stampa il simbolo
%conprintf? - Perché è utile stampare un messaggio prima di ogni
scanf?
printfformatta l'output con specificatori come%d,%f,%c.%.2ffissa il numero di decimali.scanflegge da tastiera e richiede l'indirizzo della variabile (&).- Un programma interattivo segue lo schema: chiedi, leggi, calcola, stampa.
- Hai formattato l'output con gli specificatori di
printf. - Hai letto interi e decimali da tastiera.
- Hai spiegato il ruolo di
&inscanf. - Hai scritto un programma interattivo completo.
Parole chiave
I termini principali introdotti in questa guida sono: