scanf() : lecture formatéee, au clavier en général
Prototype:
int scanf(const char* form [, adr1, adr2 ...]);
dans: <stdio.h>
Description:
Lit une suite de caractères depuis le flux d'entrée standard stdin. Ces caractères sont formatés en champs, suivant les spécifications de format indiquées par la chaîne 'form'.
La chaîne 'form' est constituée de caractères ordinaires (non interprétés par scanf) et de spécifications de format, commençant par %, ayant la forme suivante:
% [*] [taille] [h | l | L] type
Une spécification de format contient au minimum le caractère '%' et le champ type.
Décrivons chaque champ:
- % : marque le début de la zone
- * : supprime l'affectation du prochain champ d'entrée (facultatif).
- taille : nombre maximal de caractères a lire(facultatif).
- [h | l | L] : précise la taille de l'objet pointé par l'argument (facultatif).
- type : un ou plusieurs caractères, donnant le type de l'objets pointé par l'argument, pouvant être:
- c lit un caractère
- s lit une suite de caractères(terminée par un
- espace, une tabulation ou un retour-chariot)
- p lit une valeur hexadécimale non signée
- d lit un entier sous forme décimale
- u lit un entier non signé sous forme décimale
- o lit un entier non signé sous forme octale
- x lit un entier non signé sous forme hexadécimale
- e f g lit une valeur flottante
- n fournit le nombre de caractères déjà lus
- [...] lit les caractères de l'ensemble
- [^...] lit les caractères n'appartenant pas à l'ensemble.
Le programmeur doit s'assurer, lors de lecture de chaînes en particulier, que la zone mémoire dont il fournit l'adresse est assez grande pour recevoir les caractères lus.
La fonction scanf() ne fait aucune vérification sur la taille des zones mémoires qu'elle modifie.
Valeur renvoyée:
- le nombre de valeurs affectées aux adresses adr1, adr2 ... ou
- EOF en cas d'erreur lors d'une conversion ou si la fin de fichier est rencontée.
Exemple d'erreur:
une entrée telle que 'abc' pour une spécification format '%d'
Voir aussi:
Portabilité:
DOS,
UNIX,
norme
ANSI
du
langage
C.
Exemple:
exemple 1:
#include
void main() {
char c; char tc[80];
int d,h; float x; double dx;
scanf("%c",&c); /*on tapee A */
scanf("%s",tc); /*on tape bonjour */
scanf("%4d%X",&d, &h); /*on tape 5678 9ABC */
scanf("%f%lf",&x, &dx); /*on tape 3.14 et -2.718*/
printf("Les données lus sont: %c, %s, %d, %x, %f, %lf\n",
c,tc,d,h,x, dx);
}
exécution:
Les données sont: A, bonjour, 5678, 9abc, 3.140000, -2.718000
exemple 2:
#include
void main() {
char tc[100];
printf("Entrez une suite de lettres majuscules: ");
/* On tape ABCDEFghijkl */
scanf("%[A-Z]", tc);
printf("La chaîne lue est: %s\n", tc);
scanf("%4[^A-Z]", tc);
printf("La chaîne lue est: %s\n", tc);
}
exécution:
Entrez une suite de lettres majuscules: ABCDEFghijkl
La chaîne lue est: ABCDEF
La chaîne lue est: ijkl