FAQ CConsultez toutes les FAQ

Nombre d'auteurs : 27, nombre de questions : 175, dernière mise à jour : 17 décembre 2010  Ajouter une question

 

Cette FAQ a été réalisée à partir des questions fréquemment posées sur les forums de www.developpez.com et de l'expérience personnelle des auteurs.

Je tiens à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose sont correctes ; les auteurs font le maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez devenir rédacteur, lisez ceci .

Sur ce, je vous souhaite une bonne lecture.


SommaireLes entrées/sortiesEntrées/sorties en général (5)
précédent sommaire suivant
 

Ces sont des flux ouverts automatiquement à chaque démarrage d'un programme.

  • stdin est le flux associé à l'entrée standard du programme (qui est, sur de nombreux systèmes, par défaut le clavier).
  • stdout est le flux associé à la sortie standard du programme (qui est, sur de nombreux systèmes, par défaut l'écran).
  • stderr est le flux associé à l'erreur standard du programme (qui est, sur de nombreux systèmes, par défaut l'écran).


stdout et stderr sont tout deux des flux de sortie et peuvent s'utiliser avec toutes les fonctions d'écriture de fichiers (fprintf, fputc, etc.). Les fonctions de sortie ne prenant pas de flux en paramètre (printf, putchar, etc.) travaillent sur stdout.

stdin est un flux d'entrée et peut donc s'utiliser avec toutes les fonctions de lecture de fichiers (fscanf, fgetc, etc.). Les fonctions d'entrée ne prenant pas de fichier en paramètre (scanf, getchar, etc.) travaillent sur stdin.

Mis à jour le 20 septembre 2004 gl

Le C connait deux familles de fichiers :

  • Les fichiers binaires.
  • Les fichiers textes.

La différence entre ces deux types de fichiers réside dans l'interprétation que les fonctions de gestions de fichiers vont faire des données présentes dans le fichiers :

  • En mode binaire, aucune interprétation des données n'est effectuée.
  • En mode texte, certaines séquences de caractères sont interprétés comme étant une fn de ligne ou une fin de fichier

L'utilisation du spécificateur 'b' dans le mode d'ouverture permet d'indiquer qu'il s'agit d'un fichier binaire et de le traiter comme tel. Si rien n'est précisé, le fichier est ouvert en mode texte.

N.B. : certains compilateurs ont introduit le spécificateur 't' dans le mode d'ouverture afin d'indiquer qu'il s'agit d'un fichier texte. Ce spécificateur n'étant pas décrit par la norme, il n'est pas portable et ne doit donc pas être utilisé.

Mis à jour le 11 septembre 2006 gl

Contrairement à une pratique trop souvent rencontrée, la fonction feof() ne sert pas à détecter la fin d'un fichier mais, lorsqu'une lecture a échoué, à savoir si cet échec est dû à la rencontre de la fin de fichier.

La bonne pratique pour lire intégralement un fichier consiste donc à parcourir le fichier tant qu'aucune erreur de lecture n'est remontée et d'utiliser ferror() et feof() pour déterminer, suite à une erreur, la cause de cette erreur.

Le programme suivant compte les octets contenus dans un fichier pour déterminer sa taille.

Code C : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <stdio.h> 
  
int main(void) 
{ 
    FILE * fp = fopen("machin.chose", "rb"); 
  
    if (fp == NULL) 
        fprintf(stderr, "La fonction fopen a echoue.\n"); 
    else 
    { 
        int c; 
        long taille = 0; 
  
        while ((c = fgetc(fp)) != EOF) 
        { 
            /* Utilisation du caractère lu.                  */ 
            /* Dans notre cas, on n'en a rien a faire.       */ 
            /* On incrémente tout simplement notre compteur. */ 
  
            taille++; 
        } 
  
        if (feof(fp)) 
        { 
            printf("Fin de fichier atteinte !\n"); 
            printf("La taille du fichier est : %ld octets.\n", taille); 
        } 
        else 
        { 
            if (ferror(fp)) 
                printf("Arret du programme en raison d'une erreur de lecture !\n"); 
        } 
    } 
  
    return 0; 
}

Mis à jour le 7 novembre 2005 gl

getc() lit le caractère courant sur le flux d'entrée spécifié en paramètre et retourne sa valeur en tant qu'entier (int) car en cas d'échec (c'est-à-dire lorsqu'aucun caractère n'a pu être lu), elle doit retourner une valeur qui ne peut être celle d'un "caractère" valide et cette valeur est représentée par la macro EOF.

Mis à jour le 23 mars 2009 Melem

wint_t (en quelque sorte « wide integer ») est le type qui permet de représenter n'importe quel caractère large ou la valeur WEOF, l'équivalent de EOF pour les fonctions travaillant avec les caractères larges.

Mis à jour le 23 mars 2009 Melem

Qu'est-ce que le type wchar_t ?

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2016 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

 
Contacter le responsable de la rubrique C