Scanf
scanf
(dont le nom vient de l'anglais scan formatted) est une fonction de la bibliothèque standard du langage C. Déclarée dans l'entête <stdio.h>
, cette fonction peut être utilisée pour la saisie de données formatées, qu'il s'agisse de lettres, de chiffres ou de chaînes de caractères.
Usage
Le prototype de la fonction scanf est int scanf(const char * format, …);
. Tout comme la fonction printf
, les …
signifient que c'est une fonction variadique, qui peut prendre un nombre variable de paramètres. La fonction retourne le nombre de variables affectées par la saisie, et permet donc de vérifier si la saisie s’est bien passée. En cas d’erreur de lecture, cette fonction renvoie EOF
et indique la raison de l’erreur dans la variable errno
.
Le code d'exemple suivant montre comment récupérer une valeur numérique, saisie au clavier, et la stocker dans la variable nommée nombre
:
int nombre = 0; int res; printf("Entrez une valeur : "); res = scanf("%d", &nombre); if (res == 1) printf("Votre valeur est %d.\n", nombre); else // traitement de l’erreur
La fonction scanf
recopie la saisie de l'utilisateur à une adresse mémoire. Cette adresse doit être spécifiée dans la fonction scanf
(ici la saisie sera enregistrée à l'adresse de nombre
, d’où le &
devant nombre).
Il est possible de capturer plusieurs types de données avec la fonction scanf. Le type de donnée attendu est défini par le premier argument de scanf :
Type | Lettre |
---|---|
int | %d |
long | %ld |
float/double | %f / %lf |
char | %c |
string (char*) | %s |
entier hexadécimal | %x |
Pour le float ou le double il faut mettre %f ou %lf respectivement. (L en minuscule et F en minuscule)
Ainsi, pour la saisie d'une chaîne de caractères, il est nécessaire de passer par le format %s :
char nom[50]; char prenom[50]; int res; printf("Saisissez votre nom suivi de votre prénom : "); res = scanf("%49s%49s", nom, prenom); if(res == 2) printf("Vous vous appelez %s %s, est-ce correct ?\n", prenom, nom); else printf("Vous avez fait une erreur lors de la saisie.\n");
Variantes
Comme printf, la fonction scanf possède des fonctions similaires dans la gestion des fichiers et des chaines de caractères.
fscanf
fscanf permet de lire dans les fichiers de la même manière que scanf lit au clavier.
int fscanf(FILE* fd, const char* format, …);
sscanf
sscanf permet de lire dans un buffer (tampon) de façon formatée.
int sscanf(char* buf, const char* format, …);
Portail de la programmation informatique