Scanf

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher

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 | modifier le code]

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 comme récupérer une valeur numérique, saisie au clavier, et la stocker dans la variable nommée nombre :

int nombre = 0;
int res = 0;
printf("Entrez une valeur");
res = scanf("%d", &nombre);
if (res == 1)
  printf("Votre valeur est %d", 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  %lf
char  %c
string (char*)  %s
entier hexadécimal  %x

Pour le float ou le double il faut mettre %lf. (L en minuscule et F en minuscule)

Ainsi, pour la saisie d'une chaine de caractères, il est nécessaire de passer par le format %s :

char nom[50];
char prenom[50];
int res = 0;
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 ?", prenom, nom);
} else {
    printf("Vous avez fait une erreur lors de la saisie");
}

Variantes[modifier | modifier le code]

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

fscanf[modifier | modifier le code]

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 | modifier le code]

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

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