Scanf in linguaggio C è una funzione di input, così come getc e getchar.

La funzione scanf in C consente di acquisire una sequenza di caratteri (lettere o cifre) dalla tastiera e di memorizzarli all’interno di opportune variabili.

Scanf in C, corrisponde alla funzione di output printf che abbiamo già studiato in questa lezione: printf.


Sintassi scanf

scanf(“<StringaDiFormato>”,<Variabile>)

StringaDiFormato rappresenta lo specificatore di formato ed è preceduto, come nel printf, dal simbolo %.

Variabile rappresenta il nome della variabile all’interno della quale è  memorizzato il dato digitato da tastiera.

Banner Pubblicitario


Quindi ecco un esempio:

scanf(“%d“, &x);

Il simbolo &, davanti alla variabile x, indica l’indirizzo di memoria in cui si trova la variabile x.

Si interpreta quindi in questo modo: leggi un dato intero (%d) e collocalo nella posizione di memoria il cui indirizzo è &x.

L’omissione di & non comporta nessun messaggio di errore da parte del compilatore, ma comporta degli errori nei risultati.

Facciamo adesso un altro esempio:

scanf(“%d %d“, &x, &y);

Banner pubblicitario

L’istruzione appena scritta, questa volta, acquisisce due numeri interi (%d) memorizzati nelle variabili x e y.

Altro esempio con l’acquisizione di un carattere:

scanf(“%c“, &carattere);

In questo modo si prevede l’acquisizione di un qualunque carattere, spazio, tabulatore e invio compresi.

Ricordiamo che il tipo char di fatto è un intero, quindi se ad esempio digitiamo la lettera A, nella variabile carattere viene memorizzato il numero 65 (codice ASCII).

Scanf – specificatore di formato

Riportiamo di seguito gli specificatori di formato che si usano nella funzione scanf in C e che già avevamo studiato assieme alla funzione printf.

Specificatore di formato
Espressione
%c charcarattere singolo
%d (%i)
intintero decimale con segno
%e (%E)
float o double formato esponenziale
%f
float o doublereale con segno
%g (%G)
float o double%f o %e in base alle esigenze
%o intvalore in base 8 senza segno
%p pointervalore di una variabile puntatore
%s array di charstringa di caratteri
%u intintero senza segno
%x (%X)
intvalore in base 16 senza segno

Esempio d’uso della funzione scanf

Realizziamo un semplice programma che legge da tastiera innanzitutto un carattere, poi un intero e infine un numero con la virgola.

Per i double utilizzare lo specificatore di formato %lf.

#include <stdio.h>

int main() {
	int intero;
	float virgola;
	char c;
	
	printf("\nInserisci un carattere: ");
	scanf("%c", &c);
	printf("Carattere: %c", c);
	
	printf("\nInserisci un numero intero: ");
	scanf("%d", &intero);
	printf("Intero: %d", intero);

	printf("\nInserisci un numero con la virgola: ");	
	scanf("%f", &virgola);
	printf("Numero con la virgola: %5.2f", virgola);

        return 0;

}

Alcuni link utili

Indice tutorial linguaggio C

Realizzare un menù di scelta in C

Strutture complesse in C

Esercizio sulle struct in C

Typedef struct C

Media per riga e per colonna

Somma elementi diagonale principale di una matrice

Come sommare gli elementi della cornice esterna

Come sommare due matrici

Sommare dei numeri di una matrice

Matrice trasposta

Prodotto tra matrici

Ricerca elementi in una matrice

Inserire dati in una matrice

Tavola pitagorica in C

Array multidimensionali

Programma sui triangoli in C

Media dei numeri in un array

Array con numeri random

Quick sort in C

Selection sort in C

Merge sort in C

Insertion Sort in C