Home / Linguaggio C / Come leggere da tastiera (scanf) – #11 linguaggio C

Come leggere da tastiera (scanf) – #11 linguaggio C

come-leggere-da-tastiera

Se ti sei perso la guida precedente clicca qui: Le variabili

In questa lezione analizzeremo la quinta riga del codice sottostante che assegna un valore letto da tastiera a due variabili dichiarate nel programma, stampando la loro somma a video.

1 /*Somma di due numeri*/
2 #include <stdio.h>
3 main(){
4      int a, b, s;
5      scanf("%d %d", &a, &b);
6      s = a + b;
7      printf("%d", s);
8 }

La funzione che ci consente di leggere un valore da tastiera prende il nome di scanf. Come abbiamo visto nella lezione “Le librerie” esistono alcune funzioni predefinite che possono essere richiamate facilmente tramite il loro nome, queste funzioni sono contenute nelle librerie del linguaggio C. La funzione scanf è contenuta nella libreria stdio.h (standard input-output) e permette di leggere un valore da tastiera e assegnarlo ad una variabile del programma. La struttura dell’istruzione scanf è la seguente:

scanf(“specificatori di formato”, variabili);

L’istruzione scanf è composta da una prima parte racchiusa tra virgolette che contiene gli specificatori di formato che non sono nient’altro che dei caratteri che identificano il tipo di variabile da leggere (intero, char, float…), e da una seconda parte che contiene le variabili a cui gli specificatori di formato fanno riferimento. Quindi come si può ben intuire dobbiamo avere uno specificatore di formato per ogni variabile da leggere. Gli specificatori di formato standard del linguaggio c sono i seguenti:

  • %d: dati numerici interi (int);
  • %f: dati numerici in virgola mobile (float e double);
  • %c: dati formati da un solo carattere (char);
  • %s: dati stringa (concatenazioni di più caratteri);

Nella funzione scanf, l’ordine degli specificatori e delle variabili è molto importante, proprio perché il primo specificatore fa riferimento alla prima variabile, il secondo specificatore fa riferimento alla seconda variabile e così via… proprio come mostrato nell’immagine sottostante:

scanf-ordine-elementi

Questa istruzione, tratta dal nostro esempio “Somma di due numeri”, legge prima il valore intero “id” e successivamente il valore decimale “prezzo”.

Come possiamo ben notare i nomi delle variabili sono preceduta dal carattere &. Il motivo è molto semplice, la funzione scanf non lavora sulle variabili ma sugli indirizzi a cui puntano queste variabili. Sembra difficile ma fidatevi che è molto più semplice di come sembra. Provate ad aiutarvi con l’immagine sottostante.

celle-di-memoria-funzionamento-scanf

Il valore di ogni variabile è contenuto nella memoria del nostro computer, e quindi ogni variabile punterà ad una cella di memoria contenente il suo valore. La funzione scanf lavora sulla cella di memoria puntata dalla variabile e il carattere & restituisce esattamente l’indirizzo della cella di memoria della variabile che lo segue. Quindi in parola povere scanf riceve il valore intero da tastiera (%d) e lo inserisce all’indirizzo restituito dall’operatore & della variabile “id”. Il carattere & va messo per quasi tutti i tipi di dato letti da tastiera, con l’eccezione delle stringhe di caratteri che non ne hanno bisogno per un semplice motivo che analizzeremo nelle guide successivo.

scanf-linguaggio-c

Perciò dopo questo breve discorso teorico, abbiamo compreso che per leggere dei valori da tastiera (carattere o numero che sia) abbiamo bisogno di tot variabili e tot specificatori di formato a seconda di quanti valori vorremmo leggere e prima dei nomi delle variabili va messo il carattere &, fatta eccezione per le stringhe di caratteri che non ne hanno bisogno.

La fase di inserimento termina dopo la pressione del tasto INVIO, se dobbiamo leggere due valori distinti, dobbiamo prima digitare un valore poi premere INVIO, successivamente digitare il secondo valore e premere il pulsante INVIO.

Vediamo degli esempi:

Leggere un numero decimale:

float totale;                            // dichiaro una variabile di tipo float
scanf("%f", &totale);          // leggo un valore decimale da tastiera e lo inserisco nella variabile totale

Quando eseguiamo il programma dobbiamo digitare il nostro numero decimale e successivamente premere INVIO. La variabile “totale” avrà ora come valore il numero da noi inserito.

Leggere due valori, un carattere e un numero intero:

int eta;                                 //dichiaro una variabile di tipo intero
char n;                        // dichiaro una variabile di tipo carattere
scanf("%c %d", n, eta);         //leggo un carattere e lo metto nella variabile "n" e successivamente leggo un numero e lo metto nella variabile "eta"

Quando eseguiamo il programma dobbiamo digitare un carattere e premere INVIO e successivamente digitare un numero intero e premere INVIO. Nella variabile nome e nella variabile eta saranno comparsi i valori da noi inseriti.

Leggere una stringa di caratteri

char nome[20];
scanf("%s", nome);

Fate attenzione che durante l’inserimento della variabile non è ammesso il carattere spazio, il quale viene visto come carattere terminatore. Nel caso in cui inseriste la seguente stringa:

stefano marco

all’interno della variabile nome troverete solo la parola stefano.

Con questa lezione abbiamo imparato un tassello molto importante che va a formare le basi della programmazione in C. Ora possiamo passare alle operazioni sulle variabili analizzando quindi la sesta riga del nostro codice: Operazioni sulle variabili

Lascia un like alla nostra pagina Facebook per rimanere sempre aggiornato. 😉

Staff Melabu

Lascia un commento

Il tuo indirizzo email non sarà reso pubblico. I campi segnati sono obbligatori *

*