![]()
Lecture formattée ![]()
![]()
![]()
![]()
![]()
Suivant: Les dernières instructions Début: Les pointeurs Précédent: Exercice
Paragraphes
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 :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 :
- -
%d
pour un nombre décimal ;- -
%x
pour un nombre écrit en hexadécimal ;- -
%c
pour un caractère.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, seuli
recevra une valeur. Si l'entrée standard ne commence pas par un nombre décimal, ni i ni j ne recevront de valeur.Valeur rendue
Sur rencontre de fin de fichier, la fonctionscanf
rendEOF
, sinon elle rend le nombre de variables qu'elle a pu affecter.Attention
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'avorterasur 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.
30/9/1997