La funzione scanf
Proviamo ora un programma che effettua una semplice somma e fa uso della funzione scanf. Come per la printf, anche la scanf non fa parte del linguaggio di programmazione C ma fa parte delle funzioni offerte dalla libreria1 standard<stdio.h>. La funzione scanf effettua la lettura dei dati immessi da tastiera e li memorizza all'interno di una locazione di memoria.
01 #include <stdlib.h> 02 #include <stdio.h> 03 04 /* Proviamo la scanf */ 05 06 int main() 07 { 08 int a, b, somma; // dichiarazione delle variabili 09 10 printf("Valore di a: "); scanf("%d",&a); 11 printf("Valore di b: "); scanf("%d",&b); 12 13 // calcolo della somma 14 somma = a + b; 15 printf("Il valore %d rappresenta la somma tra i valori che hai immesso\n",somma); // istruzione per la visualizzazione 16 17 // chiusura del programma 18 system("PAUSE"); 20 return 0; 21 }

Il programma legge due valori in corrispondenza delle chiamate della funzione scanf nella riga 10 e della riga 11. Osserviamo che gli argomenti della scanf sono almeno due: il primo è una stringa di segnaposto "%d" che contiene una lettera indicante il tipo di dato che la scanf dovrà acquisire dalla tastiera (in questo caso d per indicare un valore intero) preceduta dal simbolo %, il secondo è l'indirizzo di memoria in cui riporre il dato. In C infatti l'indirizzo di memoria di una variabile si indica con il nome della variabile preceduto dal simbolo &. Con una singola scanf si può in realtà leggere più di una variabile semplicemente specificando tutti gli indirizzi di memoria separati da una virgola dopo la stringa dei segnaposto. Ovviamente, in questo caso, la stringa dei segnaposto dovrà contenere un segnaposto per ogni variabile elencata.

La prima novità la troviamo però già alla riga 08 dove possiamo apprezzare un secondo modo per aggiungere i commenti al codice (il primo è evidentemente quello della riga 04). In questo caso la presenza dei caratteri // annuncia al compilatore la presenza di un commento senza terminatore ma destinato a finire con la chiusura della linea di codice corrente. È un buon modo per inserire commenti veloci che magari riguardano una specifica riga di codice.

La riga 08 ha una funzione importantissima: serve per definire (ed è uno dei momenti fondamentali della programmazione) i nomi delle variabili che useremo nel programma e il tipo dei dati2 ai quali devono essere associate. int è la parolina che definisce una o più variabili di tipo intero.

Le righe 10 e 11 contengono due istruzioni. Ogni scanf è infatti preceduta da una printf che ha lo scopo di visualizzare un messaggio che aiuti l'utente a capire quale dato il programma stia aspettando. La scelta di posizionare le istruzioni sulla stessa riga ha effetto solo sulla leggibilità del codice.

Lo scopo del programma è quello di effettuare la somma di due numeri immessi da tastiera e di visualizzare il risultato dell'operazione. L'operazione di somma è realizzata dalla riga 14 che muove nella variabile somma il risultato dell'addizione a + b. Scopriamo quindi due operatori del linguaggio: l'operatore di addizione (il +) e l'operatore di assegnazione (l'=). Il segno = non ha dunque significato di uguaglianza ma di assegnazione alla variabile alla sua sinistra del risultato dell'espressione alla sua destra.

La printf della riga 15 richiede una piccola delucidazione. La stringa visualizzata, al pari delle scanf viste precedentemente, contiene il segnaposto %d. Il segnaposto in fase di visualizzazione del messaggio sullo schermo viene sostituito dal valore della variabile somma che compare come secondo argomento (il primo è il messaggio stesso) della funzione printf. Nel caso fosse necessario visualizzare con una signola printf più valori contenuti in variabili, deve essere previsto un segnaposto per ogni valore e l'elenco delle variabili deve corrispondere nell'ordine, nel tipo e nel numero a quello dei segnaposto.


NOTE
1 Una libreria è un insieme di funzioni implementate in uno o più file. Per utilizzare una libreria è necessario includerne l'header all'interno del codice sorgente. Quando il preprocessore incontra la direttiva #include, il contenuto del file specidicato tra le parentesi < e > viene inglobato nel vostro programma.
2 La memoria di un calcolatore è suddivisa in byte. Il byte è la più piccola quantità di memoria che possiamo gestire, esso corrisponde ad una relativamente piccola quantità di dati: di norma un singolo carattere o un numero intero compreso fra 0 e 255. Ma il calcolatore può elaborare anche tipi di dato più complessi che occupano piĆ¹ di un byte.

È opportuno precisare che i tipi di dato nel linguaggio C si possono dividere in due classi principali: tipi fondamentali o primitivi e tipi derivati o strutturati.

Per gestire i nostri dati sarà necessario, sin da subito, sapere quali parole del C definiscono i dati di tipo primitivo che andremo a trattare negli esempi delle prossime pagine.

char Per le variabili di tipo carattere
Short, short int, int, long, long int *Per il tipo intero
Float, double, long double *Per il tipo reale
void Per variabili senza tipo definito.
* Da sinistra vestro destra: maggior precisione e occupazione di memoria.

Una trattazione maggiormente dettagliata è presente alla pagina Tipi fondamentali o primitivi.

Ultima modifica: