getchar/putchar: Copieur...

Le but de ce programme est de recopier sur le canal standard de sortie ce qui se présente par le canal d'entrée standard.

Il fonctionne de cette manière:

  • Lecture d'un caractère.
  • Tant que le caractère n'est pas le signal de fin de fichier:
    • Sortir le caractère lu.
    • Lire un nouveau caractère.

Code c (copy1.c) (12 lignes) :
  1. #include <stdio.h>
  2.  
  3. void main (void)
  4. {
  5.   int c;
  6.   c=getchar();
  7.   while (c!=EOF)
  8.   {
  9.     putchar (c);
  10.     c=getchar();
  11.   }
  12. }

Résultat

Je copie cette ligne
Je copie cette ligne
-

Si nous introduisons la caîne de caractères suivante : "Je copie cette ligne", au moment de valider la ligne par la touche [Enter], la ligne est intégralement recopiée...

Remarques copy1.c

  • L'opérateur de relation != signifie "est différent de".
  • Attention : l'utilisation de EOF (End Of File) est interprétée de différentes manières (égal à 0 ou à -1).
    Nous pouvons donc définir la valeur de EOF comme constante au début du programme de cette manière: #define EOF -1 ou bien: #define EOF 0 afin de s'assurer que EOF sera bien interpreté.
  • Nous pouvons réduire le nombre d'instructions en positionnant la saisie du caractère dans la condition de la boucle while, ce qui nous amène au code du programme suivant : copy2.c...

Code c (copy2.c) (10 lignes) :
  1. #include <stdio.h>
  2.  
  3. void main (void)
  4. {
  5.   int c;
  6.   while ((c=getchar())!=EOF)
  7.   {
  8.     putchar (c);
  9.   }
  10. }

Remarques copy2.c

  • Profitons de ce programme pour nous rappeler l'importance des parenthèses...
    En effet, (c=getchar())!=EOF est différent de c=(getchar()!=EOF). Ce dernier affecte la valeur 0 ou 1 à la variable c selon que getchar rencontre ou non la fin de fichier.

 

Document créé le 02/01/03 01:00, dernière modification le 23/03/18 10:27
Source du document imprimé : https://www.gaudry.be/c-getchar-putchar.html

L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.