Les entrées sorties en C sont à l'extérieur du langage, et
s'inspirent fortement de celles du système Unix. Les prototypes des
fonctions sont dans le fichier include <stdio.h>. Les
entrées sorties formattées ont déjà été vues. Elles s'obtiennent
par les deux fonctions
int printf( char *format, -, -, -) int scanf( char *format, -, -, -)
On imprime le format premier argument où chaque trou désigné par un
% suivi d'un attribut est remplacé par les arguments arg
dans l'ordre. Il doit donc y avoir autant de tels arguments que de %
dans le format. Les attributs principaux sont d pour décimal,
f pour double, s pour les chaînes de
caractères, c pour un caractère. Ainsi
printf ("x = %d\n", 100) - x = 100 -
printf ("x = %5d:", 100) - x = 100:
printf ("x = %-5d:", 100) - x = 100 :
printf ("y = %6.2f:", 3.1415) - y = 3.14:
printf ("y = %-6.2f:", 3.1415)- y = 3.14 :
printf ("c = '%c'", 'A') - c = 'A'
printf ("Enfin, %s:, "la fin")- Enfin, la fin
Le résultat de printf est le nombre de caractères
imprimés. L'opération duale est scanf sauf que les blancs et
tabulations du format sont ignorés. Les fonctions sprintf et
sscanf sont indentiques, mais lisent ou écrivent dans la
chaîne de caractère donnée en premier argument avant le format.
On peut ne pas utiliser les impressions formatées. Ainsi,
putchar et getchar permettent d'écrire ou de lire un
caractère. L'entier EOF de défini dans <stdio.h> dit si le
caractère lu est la fin de l'entrée. On peut donc écrire tout ce
que l'on lit dans la fenêtre de texte par le programme suivant
#include <stdio.h>
int main()
{
int c;
while ((c = getchar()) != EOF)
putchar (c);
}
On peut aussi manipuler des fichiers, grâce aux pointeurs vers les
structures fichiers, définies dans <stdio.h>. Ainsi le
programme précédent se réécrit pour copier les fichiers de nom
MonFichier dans celui dénommé MaCopie.
#include <stdio.h>
int main()
{
FILE *ifp, *ofp;
void FileCopy (FILE *, FILE *);
if ((ifp = fopen ("MonFichier", "r")) == NULL) {
printf ("On ne peut ouvrir %s.\n", "MonFichier");
return 1;
}
if ((ofp = fopen ("MaCopie", "w")) == NULL) {
printf ("On ne peut ouvrir %s.\n", "MaCopie");
return 1;
}
FileCopy (ifp, ofp);
fclose (ifp);
fclose (ofp);
return 0;
}
void FileCopy (FILE *ifp, FILE *ofp)
{
int c;
while ((c = getc(ifp)) != EOF)
putc (c, ofp);
}
La procédure de recopie ressemble au programme précédent.
Il existe 3 pointeurs spéciaux vers des fichiers, prédéfinis dans
<stdio.h>: stdin l'entrée standard (de la fenêtre de
texte), stdout la sortie standard (dans la fenêtre de texte),
stderr la sortie standard des erreurs (qui n'a vraiment de sens
que dans le système Unix). On voit donc que getchar() et
putchar(c) sont des raccourcis pour getc(stdin) et
putc (c, stdout).
Les entrées sorties formatées peuvent se faire dans des fichiers,
dont on met le pointeur vers la structure FILE associée en
premier argument avant le format. Ces fonctions s'appellent
fprintf et fscanf. L'association entre les fichiers et
les noms de fichiers se fait par les fonctions de la librairie
standard fopen et fclose. On peut remarquer le deuxième
argument qui dit si on veut lire "r", écrire "w", ou
faire les deux "rw". On peut se positionner à un endroit
quelconque dans un fichier avec fseek
int fseek(FILE *fp, long offset, int origin);
qui se place dans le fichier fp en offset avec
le mode défini par origin (0 en absolu depuis le début du
fichier, 1 en relatif par rapport à la position courante, 2 en absolu
à partir de la fin).