La programmation C : cours 3




Nous allons faire un grand pas vers des programmes C, un peu plus complexes, en abordant les entrées et sorties en C. C'est à dire comment lire une donnée introduite au clavier ou/et l'afficher à l'écran.


La sortie formatée avec printf


Nous avons déjà vu que pour afficher une chaîne de caractères, nous utilisions la fonction printf. Il est aussi possible d'afficher des données qui peuvent être contenues dans une variable ou dans une constante. Le principe est le suivant : à l'emplacement voulu dans la chaîne de caractères passée en argument nous allons inclure des "balises". Ces balises indiqueront où seront affichées les valeurs des variables. Nous ajouterons alors à printf les variables ou constantes à afficher sous forme d'arguments dans le même ordre que leur balises.
Ces balise sont introduites par le caractère '%' suivi d'une lettre indiquant le type de la donnée. Le tableau ci-contre résume ces différentes lettres.
Un exemple sera plus clair:


//jours de l'année
int annee = 365;
float anneeVeritable = 365.25;

//affichage des jours de l'année
printf("une annee fait %d jours\n", annee);
printf("en fait il y a %f jours", anneeVeritable);
printf("et %d est different de %f...", annee, anneeVeritable);


donnera la sortie suivante :
une année fait 365 jours
en fait il y a 365.250000 jours
et 365 est different de 365.250000
On voit donc que :
_chaque balise correspond respectivement à la variable ou constante passé en argument à printf.
_la lettre associée à % correspond au type de la donnée.
Ne pas respecter cette rêgle peut aboutir à des aberrations.
Un question peut alors se poser : comment afficher le caractère '%' (code ASCII 37) ? Nous pourrions penser très justement à utiliser le caractère echappement '\' et nous aurions tort : il suffit d'écrire deux fois '%'.
Ainsi :


printf("%%%%");


affiche


%%


Enfin, nous aurons tous compris qu'il revient au même d'écrire :


printf("%s", "bonjour");


ou


printf("bonjour");



utilisation de la fonction printf sur un cas vécu...


L'entrée formatée avec scanf



La fonction scanf utilise à peu près la même syntaxe que printf.
Cette fonction associe à une ou plusieurs variables une ou plusieurs entrées clavier.
Revenons un peu sur le fonctionnement de printf. Cette fonction affiche la valeur d'une variable ou d'une constante passée en paramêtre. Pourtant, si printf affiche le contenu de la variable "annee" (pour reprendre l'exemple ci-dessus), elle ne manipule qu'une copie du contenu de celle-ci (soit 365).
La fonction scanf a besoin de manipuler l'original de la variable afin de lui donner une valeur. Pour cela, elle a besoin de connaître l'emplacement mémoire de celle-ci afin de savoir ou ranger la valeur lue au clavier. On utilise l'opérateur d'adressage '&' placé devant le nom de la variable pour connaître son adresse :


printf("%x", &annee);


Vous renverra l'adresse en hexadécimal de la variable année.
Ainsi l'instruction :


scanf("%d", &annee);


lit un entier décimal, et la range à l'adresse '&annee' qui se trouve être celle de la variable... annee.



utilisation de la fonction scanf


sorties et entrèes non formatées avec putchar() et getchar()


La lecture et la sortie de caractères peuvent être effectuées avec les macros getchar() et putchar().
La macro getchar lit un caractère et le renvoie au programme. Cela signifie que lorsque nous appuyons sur une touche, getchar prend sa valeur.
Il est ainsi possible d'écrire :


//cree la variable de type char
char caractereLu;

//lit une entree clavier et la met dans c
caractereLu = getchar()


Le programme s'arrêtera j'usqu'à ce qu'on appuie sur une touche. A ce moment la c prendra la valeur ASCII de la touche appuyée et il sera alors possible d'écrire :


printf("%c", caractereLu);


On peut aussi se servir de cette macro pour stopper un programme et attendre la validation de l'utilisteur :


printf("appuyez sur 'entree' pour finir");
getchar();
printf("au revoir !");


A noter ici qu'il est inutile de mettre l'entrée clavier dans une variable car nous n'en avons pas l'utilité.
A l'inverse, puchar() permet d'afficher un caractère.
Ainsi,


putchar('a');


ou


putchar(97);


donneront la sortie :


a


y'a un problème m'sieur ?


La touche RETURN ou 'entrée' est à la base de nombreux problèmes qui peuvent sembler insolubles.


char caractère;
printf("entrez un caractere :\n");
caractere = getchar();
printf("le caractère est : %c\n");
printf("appuyez sur entree pour continuer");
getchar();


Si vous exécutez ce programme vous verrez qu'il n'attend pas la touche 'entree' pour se terminer : il le fait directement. La raison en est que le second getchar() prend pour valeur la validation du premier getchar() par 'entree'. Pour résoudre ce problème il suffit de rajouter la macro getchar juste en dessous de l'instruction "caractere = getchar()". Cette macro prendra alors la valeur de la touche 'entree'.
Nous verons le cours suivant différents opérateurs du langage C. Nous aborderons aussi les structures de contrôle, et l'algèbre de Bool.



lorsqu'on maitrise le C, on peut faire des choses bien !


annexes


les séquences d'échappement
Le système hexadécimal
Le système octal
Argument
paramêtre
Chaîne de caractères


Précédent  |  Index  |  Suivant  ]


par Valentin BILLOTTE