Next: Les dernières instructions
Up: Les pointeurs
Previous: Exercice
Sous-sections
Lecture formattée
Il existe dans la bibliothèque standard une fonction de lecture formattée qui
fonctionne selon le même principe que la procédure printf.
Sa syntaxe d'utilisation est la suivante :
scanf ( format ,
liste-d'expressions ) ;
format est une chaîne de caractères indiquant sous forme de séquences
d'échappement les entités que scanf lit sur l'entrée standard :
- -
%d pour un nombre décimal ;
- -
%x pour un nombre écrit en hexadécimal ;
- -
%c pour un caractère.
Tous les éléments de la
liste-d'expressions doivent délivrer après
évaluation l'adresse de la variable dans laquelle on veut mettre la valeur lue.
Si le flot de caractères lu sur l'
entrée standard ne correspond pas à
format,
scanf cesse d'affecter les variables de
liste-d'expressions à la première disparité.
Exemple :
scanf("%d %x",&i,&j);
cette instruction va lire un nombre écrit en décimal et mettre sa valeur dans la
variable
i, puis lire un nombre écrit en hexadécimal et mettre sa valeur
dans la variable
j.
On aura remarqué que les paramètres
i et
j ont étés
passés par adresse à
scanf.
Si l'
entrée standard commence par un nombre décimal non suivi d'un
nombre hexadécimal, seul
i recevra une valeur.
Si l'
entrée standard ne commence pas par un nombre décimal, ni
i
ni
j ne recevront de valeur.
Sur rencontre de fin de fichier, la fonction
scanf rend
EOF, sinon
elle rend le nombre de variables qu'elle a pu affecter.
Une erreur facile à commettre est d'omettre les opérateurs
& devant
les paramètres de
scanf.
C'est une erreur difficile à détecter car le compilateur ne donnera aucun
message d'erreur et à l'exécution, ce sont les valeurs de
i et
j qui seront interprétées comme des adresses par
scanf.
Avec un peu de chance ces valeurs seront des adresses invalides, et le
programme s'avortera
3.2 sur l'exécution du
scanf, ce qui donnera une
idée du problème.
Avec un peu de malchance, ces valeurs donneront
des adresses parfaitement acceptables, et le
scanf s'exécutera
en allant écraser les valeurs d'autres variables qui ne demandaient rien
à personne.
Le programme pourra s'avorter beaucoup plus tard, rendant très difficile la
détection de l'erreur.
Next: Les dernières instructions
Up: Les pointeurs
Previous: Exercice
Bernard Cassagne
1998-12-09