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 modifier

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 modifier

Comme printf, la fonction scanf possède des fonctions similaires dans la gestion des fichiers et des chaines de caractères.

fscanf modifier

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 modifier

sscanf permet de lire dans un buffer (tampon) de façon formatée.

int sscanf(char* buf, const char* format, );