Les flux en C++ Les flux d entrées sorties Les flux standards Les opérations d entrées sorties 1/19
Les flux de sorties Programme en écriture Flux de données Destination Un flux de sortie représente un canal de communication entre un programme «écrivain» et un destinataire 2/19
Les flux d entrées Source Flux de données Programme en lecture Un flux en entrée représente un canal de communication entre une source et un programme «lecteur». 3/19
Les flux standards flux C++ cin cout cerr clog description descripteur de fichier en entrée descripteur de fichier en sortie descripteur de fichier en sortie d erreur non tamponné descripteur de fichier en sortie d erreur tamponnée 4/19
L opérateur de sortie surchargé << #include <iostream> using namespace std; int main(void) { int i = 12; // écriture d une chaîne cout << "Voici la valeur d'un entier :\n"; cout << 45; // Écriture d'un entier } cout << i << " et "<< i+1; return 0; Indiquez l'affichage correspondant 5/19
L opérateur d entrée surchargé >> #include <iostream> using namespace std; int main(void) { string ch; int i; // lecture d une chaîne cin >> ch ; // lecture d un entier cin >> i; // lecture d'un entier return 0; } Saisissez une chaîne puis un entier et Indiquez l'affichage correspondant. Faites l'exercice 15 page 27 6/19
Lecture d'une ligne (1) Méthode getline de la classe istream basic_istream<elem, Tr>& getline( char_type *_Str, streamsize _Count, char_type _Delim); Ex : char c[10]; cin.getline( &c[0], 5, '2' ); 7/19
Lecture d'une ligne (2) Méthode getline de la classe string : istream & getline( istream& istream, string& xstring, const char cfin= '\n' ); Ex : string s1; cout << "entrez une sequence (utilisez <.> pour terminer): "; getline(cin,s1, '.'); Dans quels cas va t on utiliser l'une ou l'autre de ces méthodes? 8/19
Les opérateurs d entrées sorties le type des données est automatiquement pris en compte par les opérateurs << et >> ils travaillent par référence (on ne risque plus d'omettre l'opérateur & dans scanf) ; ils sont simples d'emploi. 9/19
Les flux chaînes Ils héritent de stringstream Istringstream pour les flux d'entrée Ostringstream pour les flux de sortie Manipule les chaînes comme des flux Remplace sprintf et sscanf 10/19
Les flux chaînes Exemple : std::string input getline(cin, input); // Interprète la ligne lue : istringstream is(input); int i; double d; string s; is >> i >> d; is >> s; Donnez un exemple de saisie valide pour cet exemple. Que se passe-t-il si le premier élément n'est pas un entier? 11/19
Le formatage des flux de sortie Manipulateur endl flush setw(int) left setfill(ch ar_type) Boolalpha Fonction Envoie un caractère de retour à la ligne sur le flux et appelle la méthode flush. Vide le tampon utilisé par le flux par un appel à la méthode flush. Permet de spécifier la largeur minimale du champ dans lequel la donnée suivante sera écrite à la prochaine opération d'écriture sur le flux. Aligne les résultats à gauche. Permet de spécifier le caractère de remplissage à utiliser lorsque la largeur des champs est inférieure à la largeur minimale spécifiée dans les options de formatage. Affiche un bolléen sous la forme vrai/faux Remarque : certains de ces manipulateurs sont déclarés dans iomanip 12/19
Le formatage des flux de sortie int main(void) { cout << boolalpha << true << endl; cout << hex << 57 << endl; cout << dec << 57 << endl; cout << setfill('*') << setw(15) << 3.141592 << endl; cout << left << setw(15) << 3.141592 << endl; } Indiquez l'affichage correspondant avec le formatage Faites l'exercice 16 page 28 13/19
lecture et d'écriture de flux vers un fichier Lecture Ouvrir un flux Tant qu il y a des informations Lire information Fin tant que informations Fermer le flux Ecriture Ouvrir un flux Tant qu il y a des informations Ecrire information Fin tant que informations Fermer le flux 14/19
Associer un flux à un fichier en entrée Instancier la classe ifstream : Ifstream fichent ; Ouvrir le flux selon le mode ici par défaut fichent.open( fich.txt ) ; Utilisation du flux string val ; fichent >> val ; Fichier à inclure #include <fstream> 15/19
Associer un flux à un fichier en sortie Instancier la classe ofstream : ofstream fichsort ; Ouvrir le flux selon le mode // en mode ajout fichsort.open( fich.txt, ios::out ios::ate) ; //Utilisation du flux string val = flux en ajout ; fichsort << val ; 16/19
Les entrées sorties sur fichier ex int main(void) { // Lit les données : int i; double d, e; cout << «fournissez un entier, un réel, un autre réel : "; cin >> i >> d >> e; ofstream f("fichier.txt"); if (f.is_open()) { f << "Les données lues sont : " << i << " " << d << " " << e << endl; f.close(); } return 0; } Indiquez le résultat de ce code 17/19
Lecture et écriture de données binaires Écrit ou lit des données à partir d un tableau de caractères Permet de compresser les données L opération d écriture : write const char Rouge[] = {033, '[', '3', '1', 'm'}; cout.write(rouge, sizeof(rouge)); L opération de lecture : read char tab[20]; cin.read(tab, 20); 18/19
Classes et Opérateurs de flux << et >> On doit pouvoir lire ou écrire les données d'une classe de cette manière : cout << unarticle ;// unarticle instance de Article C'est la sérialisation Pour que l'opérateur fonctionne avec des flux sur fichier ou sur les entrées sorties standard, il faut les définir pour les types ostream et istream Définissez les opérateur << et >> pour la classe Article 19/19