Linguaggio C

Input Output

Output formattato con printf, lettura dei dati da tastiera con scanf, specificatori di formato e operatore di indirizzo.

Primi Passi | Input Output
Competenze previste
  • 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

SpecificatoreTipoEsempioRisultato
%dintprintf("%d", 42)42
%ffloat / doubleprintf("%f", 3.5)3.500000
%.2fdecimali fissiprintf("%.2f", 3.14159)3.14
%5dlarghezza minima 5printf("%5d", 42)   42
%ccharprintf("%c", 'A')A
%sstringaprintf("%s", "ciao")ciao
%%simbolo %printf("%d%%", 50)50%
Attenzione: a ogni specificatore deve corrispondere un argomento, nello stesso numero, ordine e tipo. Per stampare il simbolo % 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 = 12

Nell'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.

Flusso dei dati: tastiera, scanf, variabile, printf, schermo

Idea chiave: 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 variabileSpecificatore di scanfNota
int%d
float%f
double%lfattenzione: diverso da printf, che usa %f
char %clo 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.75
Attenzione: se l'utente digita lettere invece di numeri, scanf 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.

Verifica dei concetti

Tipo: autovalutazione   |   Argomento: printf e scanf

  1. Che cosa stampa printf("%.1f", 2.46);?
  2. Perché in scanf("%d", &a); serve il simbolo &?
  3. Quale specificatore di scanf serve per leggere un double?
  4. Come si stampa il simbolo % con printf?
  5. Perché è utile stampare un messaggio prima di ogni scanf?
In Sintesi
  • printf formatta l'output con specificatori come %d, %f, %c.
  • %.2f fissa il numero di decimali.
  • scanf legge da tastiera e richiede l'indirizzo della variabile (&).
  • Un programma interattivo segue lo schema: chiedi, leggi, calcola, stampa.
Cosa hai imparato
  • Hai formattato l'output con gli specificatori di printf.
  • Hai letto interi e decimali da tastiera.
  • Hai spiegato il ruolo di & in scanf.
  • Hai scritto un programma interattivo completo.

Parole chiave

I termini principali introdotti in questa guida sono:

printf scanf Specificatore %d %f & Input Output