Participer au site avec un Tip
Rechercher
 

Améliorations / Corrections

Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.

Emplacement :

Description des améliorations :

Fonctions fgetc, getc et getchar

Entête à inclure

#include <stdio.h>  // <cstdio> en C++

Fonctions fgetc, getc et getchar

int fgetc( FILE * stream );
int getc( FILE * stream );
int getchar();

Ces fonctions permettent toutes les trois de lire le caractère à la position courante du flux considéré. La fonction getchar impose le flux : stdin. Pour les deux autres fonctions, le flux de caractères à utiliser doit être spécifié en paramètre. Une fois le caractère lu, la position de la tête de lecture associé au flux considéré est décalée sur le prochain caractère à lire.

En fait fgetc et getc sont identiques au détail près que sur certains compilateurs la fonction getc est implémentée sous forme d'une macro.

Paramètres

Valeur de retour

Soit un octet à correctement été lu, et dans ce cas sa valeur vous est retournée (entre 0 et 255), soit une erreur c'est produite et dans ce cas la valeur EOF vous sera retournée. Cela donne 257 valeurs différentes pouvant être renvoyées : cela explique que le type de retour soit int plutôt que unsigned char.

Si une erreur vous est retournée (code EOF), il vous faudra alors consulter la variable errno pour obtenir de plus amples informations.

Codes erreurs pouvant être retournés

EAGAIN : le descripteur de flux est marqué comme non-bloquant et aucune données n'est disponible pour l'instant. Il faudra retenter la lecture ultérieurement.

EBADF : le descripteur de flux (FILE *) passé en paramètre est invalide.

EINTR : la lecture sur une ressource lente a été interrompue par l'arrivée d'un signal avant que des données ne soient disponibles.

EIO : une erreur d'accès physique au flux vient d'être générée.

...

Exemple de code

#include <stdio.h>
#include <stdlib.h>

int main( int argc, char * argv[] ) {
    
    argc--;   argv++;
    
    if ( argc == 0 ) {
        printf( "Usage: sample filename\n" );
        exit( 0 );
    }
    
    FILE * inputFile = fopen( argv[0], "r" );
    if ( inputFile == NULL ) {
        printf( "Cannot open file %s\n", argv[0] );
        exit( -1 );
    }
    
    while ( ! feof( inputFile ) ) {
        int theCurrentChar;
        printf( "Appuyez sur <ENTER> pour lire le prochain caractère du fichier");
        fflush( stdin );
        fgetc( stdin );
        
        theCurrentChar = fgetc( inputFile );
        printf( "Le caractère actuel est <<%c>>\n", theCurrentChar );
    }

    fclose( inputFile );
        
    return 0;
}

Il est à noter que ce programme n'est certainement pas le plus efficace pour calculer la taille d'un fichier, mais il est proposé à titre d'exemple d'utilisation de la fonction feof.

Sujets connexes

fopen
fputc
fclose