Leggere l'input da tastiera in Linguaggio C

L'utilità di un programma risiede nella sua capacità di elaborare dati. Per fare ciò, è necessario che il programma sia in grado di leggere dati in ingresso, elaborarli e restituire risultati in uscita.

I dati in ingresso possono essere letti da un file, scambiati su rete o inseriti dall'utente tramite la tastiera. In questa lezione ci concentreremo su quest'ultimo caso applicando la funzione scanf per leggere l'input da tastiera.

Introduzione alla funzione scanf

Per leggere l'input da tastiera, la libreria standard del C mette a disposizione una funzione che rappresenta la controparte della funzione printf per la scrittura su schermo. Questa funzione è scanf e permette di leggere i dati inseriti dall'utente.

Analogamente alla printf, nella scanf la f sta per formatted (formattato), indicando il fatto che, così come la printf ha bisogno di sapere il tipo di dato che deve stampare, anche la scanf ha bisogno di sapere il tipo di dato che deve leggere. Ciò avviene attraverso l'utilizzo dei cosiddetti specificatori di formato.

Infatti, come argomento della scanf, dobbiamo specificare una stringa di formato che indichi il tipo di dato che deve leggere e dove memorizzarlo.

Limitiamoci, a questo punto, alla lettura di valori di tipo int o double.

Supponiamo di voler leggere da tastiere un valore intero e memorizzarlo in una variabile x. Possiamo scrivere il codice che segue:

int x;
scanf("%d", &x);

Nel codice sopra, %d è lo specificatore di formato per un intero, del tutto analogo al caso della printf. Stiamo dicendo così alla scanf di leggere un intero e memorizzarlo nella variabile x che rappresenta il secondo argomento.

Rimarrebbe da spiegare cosa vuol dire il simbolo & prima della variabile x. A questo punto della guida è troppo complesso da spiegare e rimandiamo la trattazione a quando studieremo i puntatori. Possiamo dire, tuttavia, che serve a passare l'indirizzo di memoria della variabile x alla funzione scanf. L'importante è sapere che, ogniqualvolta vogliamo usare la scanf, dobbiamo piazzare davanti alle variabili che vogliamo leggere il simbolo &.

Per leggere un valore di tipo double, il codice è simile:

double y;
scanf("%lf", &y);

Anche in questo caso, %lf è lo specificatore di formato per un double. E anche in questo caso abbiamo utilizzato il simbolo & prima della variabile y.

Definizione

Leggere un intero o un double da tastiera

Per poter leggere un intero o un double da tastiera, è necessario utilizzare la funzione scanf specificando il tipo di dato da leggere attraverso un specificatore di formato.

La sintassi generale è la seguente:

int x;
scanf("%d", &x);
double y;
scanf("%lf", &y);

Programma di esempio

Adesso che sappiamo sia come stampare a schermo che leggere da tastiera, possiamo finalmente scrivere un programma che non si limiti a stampare un messaggio, ma che interagisca con l'utente.

Supponiamo di voler realizzare un programma che chiede all'utente la base e l'altezza di un triangolo e ne calcoli l'area. Il codice è il seguente:

#include <stdio.h>

int main() {
    /* Dichiarazioni */
    double base, altezza, area;

    /* Input */
    printf("Inserisci la base del triangolo: ");
    scanf("%lf", &base);

    printf("Inserisci l'altezza del triangolo: ");
    scanf("%lf", &altezza);

    /* Calcolo dell'area */
    area = base * altezza / 2;

    /* Output */
    printf("L'area del triangolo è: %lf\n", area);

    return 0;
}

In questo programma abbiamo applicato tutto ciò che abbiamo appreso in queste prime lezioni sul linguaggio C:

  • abbiamo dichiarato delle variabili di tipo double per memorizzare la base, l'altezza e l'area del triangolo;
  • abbiamo chiesto all'utente di inserire la base e l'altezza del triangolo;
  • abbiamo calcolato l'area del triangolo;
  • abbiamo stampato a schermo il risultato.

Provando ad eseguire il programma otteniamo un output simile a questo:

Inserisci la base del triangolo: 5
Inserisci l'altezza del triangolo: 3
L'area del triangolo è: 7.500000

In Sintesi

In questa lezione abbiamo aggiunto un altro tassello alla nostra conoscenza sui fondamenti del linguaggio C: abbiamo imparato a leggere l'input da tastiera attraverso la funzione scanf.

Sebbene non abbiamo studiato tutti i suoi dettagli, abbiamo imparato a leggere valori di tipo int e double e a memorizzarli in variabili. Ciò ci consente, già da adesso, di realizzare programmi semplici ma comunque utili e che vanno oltre la semplice stampa di messaggi a schermo.

Nella prossima lezione studieremo un altro concetto fondamentale del C: la definizione di costanti.