Les flots d’entrée et de sortie

Les flots d’entrée et de sortie

La classe ostream

Elle surdéfinit l’opérateur << sous la forme d’une fonction membre : ostream & operator << (expression) L’expression correspondant à son deuxième opérande peut être d’un type de base quelconque, y compris char, char * (on obtient la chaîne pointée) ou un pointeur sur un type quelconque autre que char (on obtient la valeur du pointeur) ; pour obtenir la valeur de l’adresse d’une chaîne, on la convertit artificiellement en un pointeur de type void *. exos_c++.book Page 237 Jeudi, 5. juillet 2007 11:10 11 Les flots d’entrée et de sortie Exercices en langage C++ 238 © Éditions Eyrolles Fonctions membres : ■ ostream & put (char c) transmet au flot correspondant le caractère c. ■ ostream & write (void * adr, int long) envoie long caractères, prélevés à partir de l’adresse adr. La classe istream Elle surdéfinit l’opérateur >> sous la forme d’une fonction membre : istream & operator >> (type_de_base &) Le type_de_base peut être quelconque, pour peu qu’il ne s’agisse pas d’un pointeur (char * est cependant accepté ; il correspond à l’entrée d’une chaîne de caractères, et non d’une adresse). Les « espaces blancs » (espace, tabulation horizontale \t ou verticale \v, fin de ligne \n et changement de page \f) servent de « délimiteurs » (comme dans scanf), y compris pour les chaînes de caractères. Principales fonctions membres : ■ istream & get (char & c) extrait un caractère du flot d’entrée et le range dans c. ■ int get () extrait un caractère du flot d’entrée et en renvoie la valeur (sous forme d’un entier) ; fournit EOF en cas de fin de fichier. ■ istream & read (void * adr, int taille) lit taille caractères sur le flot et les range à partir de l’adresse adr. La classe iostream Elle est dérivée de istream et ostream. Elle permet de réaliser des entrées sorties « conversationnelles ». Le statut d’erreur d’un flot À chaque flot est associé un ensemble de bits d’un entier formant le « statut d’erreur du flot ». Les bits d’erreur La classe ios (dont dérivent istream et ostream) définit les constantes suivantes : ■ eofbit : fin de fichier (le flot n’a plus de caractères disponibles) ; ■ failbit : la prochaine opération sur le flot ne pourra pas aboutir ; ■ badbit : le flot est dans un état irrécupérable ; ■ goodbit (valant, en fait 0) : aucune des errreurs précédentes. exos_c++.book Page 238 Jeudi, 5. juillet 2007 11:10 11 © Éditions Eyrolles 239 chapitre n° 12 Les flots d’entrée et de sortie Une opération sur le flot a réussi lorsqu’un des bits goodbit ou eofbit est activé. La prochaine opération sur le flot ne pourra réussir que si goodbit est activé (mais il n’est pas certain qu’elle réussisse !). Lorsqu’un flot est dans un état d’erreur, aucune opération ne peut aboutir tant que la condition d’erreur n’a pas été corrigée et que le bit d’erreur correspondant n’a pas été remis à zéro (à l’aide de la fonction clear). Accès aux bits d’erreur La classe ios contient cinq fonctions membre : ■ eof () : valeur de eofbit ; ■ bad () : valeur de badbit ; ■ fail () : valeur de failbit ; ■ good () : 1 si aucun bit du statut d’erreur n’est activé ; ■ rdstate () : valeur du statut d’erreur (entier). Modification du statut d’erreur void clear (int i=0) donne la valeur i au statut d’erreur. Pour activer un seul bit (par exemple badbit), on procédera ainsi (fl étant un flot) : fl.clear (ios::badbit | fl rdstate() ) ; Surdéfinition de () et de ! Si fl est un flot, (fl) est vrai si aucun des bits d’erreur n’est activé (c’est-à-dire si good est vrai) ; de même, !fl est vrai si un des bits d’erreur précédents est activé (c’est-à-dire si good est faux.

Surdéfinition de << et >> pour des types classe

On surdéfinira << et >> pour une classe quelconque, sous forme de fonctions amies, en utilisant ces « canevas » : ostream & operator << (ostream sortie, type_classe objet1) { // Envoi sur le flot sortie des membres de objet en utilisant // les possibilités classiques de << pour les types de base // c’est-à-dire des instructions de la forme : // sortie << ….. ; return sortie ; } 1. Ici, la transmission peut se 1. faire par valeur ou par référence. exos_c++.book Page 239 Jeudi, 5. juillet 2007 11:10 11 Exercices en langage C++ 240 © Éditions Eyrolles istream & operator >> (istream & entree, type_de_base & objet) { // Lecture des informations correspondant aux différents membres de objet // en utilisant les possibilités classiques de >> pour les types de base // c’est-à-dire des instructions de la forme : // entree >> ….. ; return entree ; } Le mot d’état du statut de formatage À chaque flot, est associé un « statut de formatage » constitué d’un mot d’état et de trois valeurs numériques (gabarit, précision et caractère de remplissage). Voici les principaux bits du mot d’état : Action sur le statut de formatage On peut utiliser, soit des « manipulateurs » qui peuvent être « simples » ou « paramétriques », soit des fonctions membre. a. Les manipulateurs non paramétriques Ils s’emploient sous la forme : flot << manipulateur flot >> manipulateur.

Association d’un flot à un fichier

La classe ofstream, dérivant de ostream, permet de créer un flot de sortie associé à un fichier : ofstream flot (char * nomfich, mode_d_ouverture) La fonction membre seekp (déplacement, origine) permet d’agir sur le pointeur de fichier. De même, la classe ifstream, dérivant de istream, permet de créer un flot d’entrée associé à un fichier : ifstream flot (char * nomfich, mode_d_ouverture) Les principaux manipulateurs non paramétriques Manipulateur Utilisation ACTION dec Entrée/Sortie Active le bit de conversion décimale hex Entrée/Sortie Active le bit de conversion hexadécimale oct Entrée/Sortie Active le bit de conversion octale endl Sortie Insère un saut de ligne et vide le tampon ends Sortie Insère un caractère de fin de chaîne (\0) Les principaux manipulateurs paramétriques Manipulateur Utilisation Rôle setbase (int) Entrée/Sortie Définit la base de conversion setprecision (int) Entrée/Sortie Définit la précision des nombres flottants setw (int) Entrée/Sortie Définit le gabarit. Il retombe à 0 après chaque opération exos_c++.book Page 241 Jeudi, 5. juillet 2007 11:10 11 Exercices en langage C++ 242 © Éditions Eyrolles La fonction membre seekg (déplacement, origine) permet d’agir sur le pointeur de fichier. Dans tous les cas, la fonction close permet de fermer le fichier. L’utilisation des classes ofstream et ifstream demande l’inclusion du fichier fstream. Dans certaines implémentations, il peut encore s’agir de fstream.h (associé alors à iostream.h et non à iostream, et sans l’utilisation de l’espace de noms std). Modes d’ouverture d’un fichier Exercice 118 Il faut donc activer d’abord le bit fixed, ensuite le bit scientific du champ floatfield. Nous utiliserons la fonction setf, membre de la classe ios. Notez bien qu’il faut éviter d’écrire, par exemple : setf (ios::fixed) ; Les différents modes d’ouverture d’un fichier Bit de mode d’ouverture Action ios::in Ouverture en lecture (obligatoire pour la classe ifstream) ios::out Ouverture en écriture (obligatoire pour la classe ofstream) ios::app Ouverture en ajout de données (écriture en fin de fichier) ios::ate Se place en fin de fichier après ouverture ios::trunc Si le fichier existe, son contenu est perdu (obligatoire si ios::out est activé sans ios::ate ni ios::app) ios::binary (Utile dans certaines implémentations uniquement.) Le fichier est ouvert en mode dit « binaire » ou encore « non translaté ».

Formation et coursTélécharger le document complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *