La funzione scanf in C: leggere l'input

Nel linguaggio C la funzione scanf (abbreviazione di “scan formatted”) permette di acquisire dei caratteri dal canale di standard input (stdin), di convertirli nel formato corretto in base alle specifiche di formattazione indicate nel parametro format e di memorizzarli in opportune variabili. La sua sintassi è la seguente:


  
int scanf(const char *format, ...)


La funzione scanf è composta dal parametro format che contiene lo specificatore di formato (molto simili a quelli utilizzati nella funzione printf) e di una serie di parametri opzionali che permettono di specificare le variabili, all’interno delle quali vengono memorizzati i valori in input.

NOTA: Come la funzione printf anche la funzione scanf è contenuta nella libreria <stdio.h>

Esempio di utilizzo della funzione scanf

Consideriamo il seguente esempio in cui viene richiesto all’utente di inserire un numero intero.


  
#include <stdio.h>

int main(){
	int x;
	printf("Inserisci un numero: ");
	scanf("%d", &x);
	printf("\nHai inserito il numero: %d", x);

	return 0;
}


Quando il programma stampa sullo standard output il contenuto della prima printf, si ferma e attende l’inserimento da parte dell’utente di un numero. Una volta inserito il numero, la funzione scanf memorizza tale valore nella variabile x e il programma riprende l’esecuzione.
In questo esempio notiamo che la funzione scanf possiede un parametro aggiuntivo, ovvero la variabile x nella quale viene memorizzato il valore inserito da tastiera. Il simbolo & che precede la variabile x viene usato per indicare l’indirizzo di memoria in cui si trova la variabile x.

Volendo possiamo chiedere all’utente di inserire più numeri alla volta. Per fare ciò, basta aggiungere uno specificatore di formato all’interno della stringa e di aggiungere un’altra variabile in cui salvare il valore.

Per esempio chiediamo all’utente di inserire un numero intero e un carattere.


  
#include <stdio.h>

int main(){
	int x;
    char c;
	printf("Inserisci un numero intero e un carattere: ");
	scanf("%d %c", &x, &c);
	printf("\nHai inserito il numero: %d e il carattere %c", x, c);

	return 0;
}


NOTA: Per non andare incontro ad errori è importante precisare i corretti specificatori di formato.

Specificatori di formato

I specificatori di formato sono definiti dal carattere di percentuale “%” seguiti da una specifica lettera che ne determina il tipo di dato.Nella seguente tabella sono riportati i principali specificatori di formato della funzione scanf.

Specificatore di formatoTipo di dato
%d, %iint: intero decimale con segno
%ffloat o double: reale con segno
%cchar: carattere singolo
%sstring: array di caratteri
%e, %Efloat o double: forma esponenziale standard
%g, %Gfloat o double: notazione reale o esponenziale, scegliendo tra %e (%E) o %f
%oint: intero in base ottale senza segno
%uint: intero in base decimale senza segno
%x, %Xint: intero in base esadecimale senza segno
%ppointer: valore variabile puntatore

NOTA: è importante ricordare che i numeri possono essere rappresentati come caratteri e che i caratteri possono essere rappresentati come numeri, tutto in base alla tabella ASCII.

Indice pagine linguaggio C: