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.
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);
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 | char – carattere singolo |
%d (%i) |
int – intero decimale con segno |
%e (%E) |
float o double – formato esponenziale |
%f |
float o double – reale con segno |
%g (%G) |
float o double – %f o %e in base alle esigenze |
%o | int – valore in base 8 senza segno |
%p | pointer – valore di una variabile puntatore |
%s | array di char – stringa di caratteri |
%u | int – intero senza segno |
%x (%X) |
int – valore 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
Realizzare un menù di scelta in C
Somma elementi diagonale principale di una matrice
Come sommare gli elementi della cornice esterna
Sommare dei numeri di una matrice
Ricerca elementi in una matrice