Entrées-Sorties



next up previous contents index
Next: Fonctions graphiques Up: Quelques éléments de Previous: Structures

Entrées-Sorties

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).



next up previous contents index
Next: Fonctions graphiques Up: Quelques éléments de Previous: Structures