Objectifs. Introduction. IO Standards. Fichiers. Formatage. EPFL 2016 Jean-Cédric Chappelier & Jamila Sam. Objectifs. Introduction.

Documents pareils
Génie Logiciel I. Cours VI - Typage statique / dynamique, fonctions virtuelles et classes abstraites, flots d entrées / sorties, et string

TP : Gestion d une image au format PGM

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai.

Représentation d un entier en base b

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Algorithmique et Programmation, IMA

Programmation système I Les entrées/sorties

Compléments de documentation Scilab : affichage de texte et formatage de nombres

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP


Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Flux de données Lecture/Ecriture Fichiers

Introduction à l algorithmique et à la programmation M1102 CM n 3

Rappels Entrées -Sorties

ACTIVITÉ DE PROGRAMMATION

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Programmation système en C/C++

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Premiers Pas en Programmation Objet : les Classes et les Objets

Présentation du langage et premières fonctions

Programmation C++ (débutant)/instructions for, while et do...while

STAGE IREM 0- Premiers pas en Python

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Programmation impérative

Cours de C/C++ par la pratique. Hugues Talbot

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

TP 1. Prise en main du langage Python

1 Lecture de fichiers

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Java Licence Professionnelle CISII,

Les chaînes de caractères

INF 321 : mémento de la syntaxe de Java

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Algorithmique et programmation : les bases (VBA) Corrigé

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Cours d algorithmique pour la classe de 2nde

Définition 0,752 = 0,7 + 0,05 + 0,002 SYSTÈMES DE NUMÉRATION POSITIONNELS =

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

TD3: tableaux avancées, première classe et chaînes

Programme Compte bancaire (code)

Initiation à la Programmation en Logique avec SISCtus Prolog

Chapitre 2 Devine mon nombre!

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Solutions du chapitre 4

I. Introduction aux fonctions : les fonctions standards

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Claude Delannoy. 3 e édition C++

Cours d Algorithmique et de Langage C v 3.0

30.avr.10 Présentation miniprojet. 9.mars.10 Cours 3 4.mai.10 Cours C mars.10 Cours 4 11.mai.10 Cours C++ 2

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

Introduction au langage C

Cours 1 : Qu est-ce que la programmation?

Cours Informatique Master STEP

Cours 14 Les fichiers

1. Structure d'un programme FORTRAN 95

2 Comment fonctionne un ordinateur, dans les grandes lignes

Programmation en langage C

Le langage C. Séance n 4

Bases de programmation. Cours 5. Structurer les données

Plan du cours. Historique du langage Nouveautés de Java 7

COMPARAISONDESLANGAGESC, C++, JAVA ET

Programmation en C/C++

Création du projet : 1 sur 13

V- Manipulations de nombres en binaire

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Utilisation d objets : String et ArrayList

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

TP, première séquence d exercices.

AWS avancé. Surveiller votre utilisation d EC2

Cours d initiation à la programmation en C++ Johann Cuenin

TP1. Outils Java Eléments de correction

Licence Sciences et Technologies Examen janvier 2010

1.6- Génération de nombres aléatoires

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

USTL - Licence ST-A 1ère année Codage de l information TP 1 :

Programmation C. Apprendre à développer des programmes simples dans le langage C

Cours Informatique 1. Monsieur SADOUNI Salheddine

Traitement de texte : Quelques rappels de quelques notions de base

Sage 100 CRM Guide de l Import Plus avec Talend Version 8. Mise à jour : 2015 version 8

Examen Médian - 1 heure 30

ENDNOTE X2 SOMMAIRE. 1. La bibliothèque EndNote 1.1. Créer une nouvelle bibliothèque 1.2. Ouvrir une bibliothèque EndNote 1.3. Fermer une bibliothèque

Dans l'article précédent, vous avez appris

Durée estimée :1 journée Date de la réalisation : Description Fournisseur Référence Nombre PU HT LM35CZ, LM35AZ LM35DZ

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Algorithme. Table des matières

Approche Contract First

Initiation à la programmation en Python

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Projet de programmation (IK3) : TP n 1 Correction

Assembleur. Faculté I&C, André Maurer, Claude Petitpierre

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Informatique Générale

Programmation système de commandes en C

Transcription:

du cours d aujourd hui Informatique I : Cours d introduction à l informatique et à la programmation Entrées/Sorties en C++ Présenter les bases des entrées/sorties en C++ : les entrées/sorties clavier/écran (cin/cout) les fichiers formatage des entrées/sorties Laboratoire d Intelligence Artificielle Faculté I&C Informatique I Cours 11 & 12 : Entrées/Sorties 1 / 41 Informatique I Cours 11 & 12 : Entrées/Sorties 2 / 41 Interagir avec le monde : les entrées/sorties Buts des entrées/sorties Jusqu à présent, les possibilités d interaction de vos programmes sont restées très limitées : quelques exemples rudimentaires de saisie au clavier (cin) et d affichage à l écran (cout). intégrer, au sein du programme, des données issues de l extérieur, par exemple saisies au clavier ou lues dans un fichier nécessité de fonctions d entrée, permettant d associer des informations externes aux variables du programme communiquer des données internes On peut évidemment faire beaucoup plus! Les interactions d un programme avec «l extérieur» sont gérées par des instructions d entrée/sortie et ce qu on appelle des «flots». Un flot correspond à un canal d échange de données entre le programme et l extérieur. cin est le nom de la variable associée par défaut au flot d entrée. On l appelle «entrée standard». cout est le nom de la variable associée par défaut au flot de sortie. On l appelle «sortie standard». nécessité de fonctions de sortie, permettant de visualiser (en spécifiant éventuellement le format) les valeurs des variables du programme. sauvegarder les résultats produits par les programmes, par exemple pour des utilisations ultérieures nécessité de fonctions de lecture/écriture, permettant 1. de stocker dans des fichiers les données produites par les programmes 2. de récupérer dans le programme les données contenues dans de tels fichiers Informatique I Cours 11 & 12 : Entrées/Sorties 3 / 41 Informatique I Cours 11 & 12 : Entrées/Sorties 4 / 41

Entrées-sorties clavier/écran Affichage à l écran cout << expr1 << expr2 << ; À l heure actuelle, les interactions les plus simples («naturelles»?) avec un programme se font via l écran pour la sortie et le clavier pour les entrées. affiche à l écran les valeurs des expressions expr1, expr2,. En C++, ces «flots» sont représentés respectivement par cout et cin. cin et cout sont définis dans le fichier de définitions iostream. Pour les utiliser il faut donc faire #include <iostream> Remarque : par défaut, les valeurs affichées ne sont pas séparées par des espaces ajoutez des ' ' (1 espace), si nécessaire. Exemple d affichage : int a(1); cout << "intervalle : [" << -a << ", " << a << "]" << endl; au début du programme. intervalle : [-1, 1] Remarque : endl permet à l affichage d aller à la ligne. Informatique I Cours 11 & 12 : Entrées/Sorties 5 / 41 Informatique I Cours 11 & 12 : Entrées/Sorties 6 / 41 Lecture au clavier Exemple simple d entrée-sortie cin >> var1 >> var2 >> ; permet à l utilisateur de saisir au clavier une liste de valeurs val1, val2, qui seront stockées dans les variables var1, var2,.... Remarque : Lorsque plusieurs valeurs sont lues à la suite, le caractère séparateur de ces valeurs est le retour à la ligne ou l espace. Attention! On ne peut donc pas lire en une fois une ligne entière contenant des blancs (par exemple saisie d un nom composé) avec cin il faut utiliser getline pour lire une ligne entière (contenant des espaces) Conseil : faire précéder les «getline(cin, )» de : cin >> ws; #include <iostream> int main () { int i ; double x; cout << "Valeurs pour i et x : "; cin >> i >> x ; cout << "lus : " << i << ", " << x << endl; return 0; string phrase_a_lire; cin >> ws; getline(cin, phrase_a_lire); Informatique I Cours 11 & 12 : Entrées/Sorties 7 / 41 Informatique I Cours 11 & 12 : Entrées/Sorties 8 / 41

Contrôle strict de l entrée clavier Contrôle strict de l entrée clavier Vous avez peut être remarqué que la lecture sur cin est parfois «capricieuse» (e.g. quand on ne lui donne pas ce qu elle attend). Exemple tiré des séries d exercices : int lu; do { cout << "entrez un nombre entre 1 et 10 : "; cin >> lu; while ((lu < 1) (lu > 10)); Si vous tapez 'a' (ou n importe quoi qui ne soit pas un nombre) boucle infinie!! #include <limits> int lu(0); do { cout << "entrez un nombre entre 1 et 10 : "; cin >> lu; if (cin.fail()) { // teste si cin "ne va pas bien" cout << "Je vous ai demandé d'entrer un nombre, " << "pas du charabia!" << endl; // remet cin dans un état lisible cin.clear(); // "jette" tout le reste de la ligne cin.ignore(numeric_limits<streamsize>::max(), '\n'); while ((lu < 1) (lu > 10)); Comment éviter cela? en contrôlant l état du flot cin (et en «jetant à la poubelle» ce qui ne convient pas) Remarque : Une autre solution consiste à ne lire l entrée que caractère par caractère avec la fonction get ( c = cin.get() ) et à traiter ensuite la séquence lue, de façon totalement contrôlée par notre programme. Mais cette bonne solution («tokenization», flex) est trop avancée dans sa mise en œuvre pour être détaillée dans ce cours. Informatique I Cours 11 & 12 : Entrées/Sorties 9 / 41 Informatique I Cours 11 & 12 : Entrées/Sorties 10 / 41 Sortie erreur standard Les entrées/sorties avec des fichiers En plus de cin et cout, il existe une sortie d erreur standard, cerr. Par défaut cerr est envoyée sur le terminal, comme cout. Mais il s agit bien d un flot séparé! On peut en effet sous plusieurs systèmes d exploitation séparer la sortie standard de la sortie d erreur standard : (commandes Unix) ls > bidon more bidon rm bidon # bidon contient le resultat de la commande ls ls nonononono > bidon more bidon # bidon est vide : le flot d erreur n est pas envoyé # dans le fichier, uniquement le flot de sortie rm bidon Conseil : Pour afficher des messages d erreur depuis votre programme, cerr plutôt que cout. préférez Pour sauvegarder de façon permanente (i.e. rendre disponible après la fin de l exécution du programme) les données produites par un programme, une solution est d utiliser le système de fichiers fourni par le système d exploitation. Il est donc nécéssaire d avoir un objet informatique permettant de gérer les entrées et les sorties du programme vers le système de fichiers. Cet objet informatique (appelé un flot, «stream» en anglais) représente en fait un lien à un fichier physique stocké dans le disque et géré par le système de fichiers. L idée de base des flots est de séparer l aspect logique des entrées-sorties (i.e. leur intégration dans des programmes) de leur aspect physique (i.e. leur réalisation par le biais de périphériques particuliers). Informatique I Cours 11 & 12 : Entrées/Sorties 11 / 41 Informatique I Cours 11 & 12 : Entrées/Sorties 12 / 41

Les entrées/sorties avec des fichiers (2) Les types «stream» Programme C++ stream file2 stream file1 stream file3 stream file4 lecture lecture écriture lecture Système d exploitation Fichier f1.txt Fichier f2.txt Fichier f3.txt Comme pour de nombreuses autres notions C++, pour pouvoir utiliser les flots, il faut tout d abord inclure les fichiers de définitions correspondant, iostream et fstream : #include <iostream> #include <fstream> Deux nouveaux types sont alors disponibles : ifstream (pour input file stream) qui définit un flot d entrée (similaire à cin) ofstream (pour output file stream) qui définit un flot de sortie. (similaire à cout) Attention! On ne peut jamais copier de flot (ifstream, ofstream, ), ni les passer par valeur. Il faut impérativement les passer par référence! Informatique I Cours 11 & 12 : Entrées/Sorties 13 / 41 Informatique I Cours 11 & 12 : Entrées/Sorties 14 / 41 Utilisation des flots Création d un flot Mécanisme général pour la mise en œuvre d entrées-sorties : création d un flot (d entrée ou de sortie) par la déclaration d une variable du type correspondant (ifstream ou ofstream). lien de la variable déclarée avec un dispositif d entrée-sortie physique (fichier) utilisation de la variable déclarée et liée pour effectivement réaliser les entrées-sorties fermeture du flot Pour créer un flot, il suffit de déclarer une variable du type correspondant. ifstream entree; ofstream sortie; La plupart de ces actions se font en applicant des fonctions spécifiques définies pour les types stream. déclare deux variables entree et sortie, respectivement de type ifstream et ofstream. Ces fonctions sont appelées avec la syntaxe suivante : nom_de_flot.nom_de_fonction(arg1, ); Informatique I Cours 11 & 12 : Entrées/Sorties 15 / 41 Informatique I Cours 11 & 12 : Entrées/Sorties 16 / 41

Lien avec un fichier Lien avec un fichier (2) Dans le cas des fichiers textes (fichiers lisibles par les humains), l association d un flot d entrée-sortie avec le fichier se fait par le biais de la fonction spécifique open. Par défaut, un «ofstream» ouvre le fichier en mode «écrasement» (c est-à-dire détruit le contenu du fichier si il existe déja) ifstream entree; entree.open("test.txt"); On souhaite parfois pouvoir ouvrir le fichier en mode «ajout» («append») (c est-à-dire écrire en fin de fichier) associe le stream entree avec le fichier physique test.txt. Cela se fait aussi en ajoutant un argument supplémentaire à open : Dans le cas des fichiers binaires, il faut ajouter un argument supplémentaire : ios::in ios::binary pour la lecture ios::out ios::binary pour l écriture ofstream sortie; sortie.open("a_poursuire.txt", ios::out ios::app); Dans le cas de fichiers en binaire : ifstream entree; entree.open("a_lire.zip", ios::in ios::binary); ofstream sortie; sortie.open("a_ecrire.exe", ios::out ios::binary); sortie.open("a_completer.data", ios::out ios::binary ios::app); Informatique I Cours 11 & 12 : Entrées/Sorties 17 / 41 Informatique I Cours 11 & 12 : Entrées/Sorties 18 / 41 Lien avec un fichier (3) Lien avec un fichier (remarque C++98) L association du stream d entrée ou de sortie avec un fichier particulier peut aussi se faire directement par une initialisation lors de la déclaration du stream : : OUF! Ce n est plus vrai oubliez! C++98 : ifstream entree("test.txt") ; déclare la variable entree et l associe au fichier texte test.txt. L utilisation directe d une variable de type string pour donner un nom de fichier n est malheureusement pas possible. Le nom du fichier doit être une chaîne de caractères littérale (""). Dans le cas de fichiers en binaire : ifstream entree("a_lire.zip", ios::in ios::binary); Les variables de type string doivent être utilisées par le biais de la fonction c_str() spécifique aux variables de type string. ofstream sortie("a_ecrire.exe", ios::out ios::binary); string chaine1("un_fichier"); Dans le cas de fichiers en écriture en mode «ajout» : ofstream sortie("a_poursuivre.txt", ios::out ios::app); ofstream sortie1(chaine1); // en C++98 (i.e avant C++11) : ajouter c_str() : // ofstream sortie1(chaine1.c_str()); Informatique I Cours 11 & 12 : Entrées/Sorties 19 / 41 Informatique I Cours 11 & 12 : Entrées/Sorties 20 / 41

Validité des accès fichier Utilisation des flots Il est important de vérifier que le lien du flot avec le fichier s est bien passé (e.g. le fichier existe, il est bien lisible, ). L utilisation des variables de type ifstream ou ofstream dans les programmes pour réaliser les entrées-sorties se fait de la même façon que pour les flots particuliers cin et cout, à l aide des opérateurs << et >>. Ceci est fait en testant l état du flot, typiquement après l appel à la fonction open() : ifstream entree("test.txt") ; if (not entree.fail()) { \\ Utilisation de entree ifstream entree("fichier_entree.txt"); ofstream sortie("fichier_sortie.txt"); string mot; En cas de problème, la fonction fail() du flot retourne la valeur true si le flot n est pas dans un état correct pour la prochaine opération (lecture ou écriture). Elle renvoie false si le flot est prêt. (voir aussi exemples complets plus loin) entree >> mot; // lit un mot dans le fichier "fichier_entree.txt" sortie << mot; // écrit ce mot dans "fichier_sortie.txt" entree >> ws; // "nettoye" les blancs pour la lecture avec getline getline(entree, mot); Informatique I Cours 11 & 12 : Entrées/Sorties 21 / 41 Informatique I Cours 11 & 12 : Entrées/Sorties 22 / 41 Utilisation des flots Remarques Fermeture des flots Dans un contexte de test, les opérateurs << et >>, ainsi que getline, retournent en fait «not flot.fail()», Exemples : La fermeture du stream se fait par la fonction close if (cin >> x) { // on a pu lire x while (entree >> nom >> age) { // on a eut un nom (1 seul mot) et un age while (getline(entree, ligne)) { // on peut traiter la ligne ifstream entree("fichier_entree"); entree.close(); En cas d erreur, une fonction utile pour tester si l erreur est liée à la fin du fichier (ou à autre chose) est la fonction eof. Attention! NE PAS oublier de fermer tout fichier ouvert! En particulier en écriture : vous risqueriez sinon d avoir des surprises while (entree >> age) { if (not entree.eof()) { cerr << "je voulais un entier" << endl; // etc Note : Ceci dit la norme C++ garantit l appel de close() en fin de vie d une variable de type stream mais attention en cas d utilisations multiples (faire close avant de refaire open)! Informatique I Cours 11 & 12 : Entrées/Sorties 23 / 41 Informatique I Cours 11 & 12 : Entrées/Sorties 24 / 41

Exemple de lecture à partir d un fichier Écriture dans un fichier Exemple de programme d écriture dans un fichier texte : Exemple de programme de lecture d un fichier texte de nom «test» : int main() { string nom_fichier; int main() { string nom_fichier("test"); ifstream entree(nom_fichier); // C++98 : ajouter.c_str() cout << "Dans quel fichier voulez vous écrire? "; cin >> ws; getline(cin, nom_fichier); if (entree.fail()) { cerr << "Erreur : impossible de lire le fichier " << nom_fichier << endl; else { string mot; while (entree >> mot) { cout << "lu : \"" << mot << '"' << endl; entree.close() ; return 0; ofstream sortie(nom_fichier); // C++98 :.c_str() if (sortie.fail()) { cerr << "Erreur : impossible d'écrire dans le fichier " << nom_fichier << endl; else { string phrase; cout << "Entrez une phrase : "; cin >> ws; if (getline(cin, phrase)) { sortie << phrase << endl; sortie.close(); return 0; Informatique I Cours 11 & 12 : Entrées/Sorties 25 / 41 Informatique I Cours 11 & 12 : Entrées/Sorties 26 / 41 Sorties formatées Manipulateurs Exemple de quelques manipulateurs : Un certain nombre de paramètres pour le format des sorties peuvent être explicitement spécifiés. Il peuvent être de deux formes : soit des manipulateurs appliqués à l instruction << ➀ setprecision : précision désirée dans l affichage des nombres for (int i(2); i <= 5; ++i) { cout << setprecision(i) << i << " " << 123.46 << endl; soit des options de configurations pour une variable de type ostream (dont cout en particulier) (Note : certains formatages peuvent s obtenir indifféremment des deux façons) Pour pouvoir utiliser les manipulateurs, il faut utiliser le fichier de définitions iomanip : #include <iomanip> Les manipulateurs s utilisent de la façon suivante : cout << manipulateur << expression << ➁ 2 1.2e+02 3 123 4 123.5 5 123.46 dec, hex, oct : choix de la base numérique : décimale, hexadécimale, octale cout << 16 << ", " << hex << 16 << ", " << oct << 16 << endl; 16, 10, 20 Informatique I Cours 11 & 12 : Entrées/Sorties 27 / 41 Informatique I Cours 11 & 12 : Entrées/Sorties 28 / 41

Manipulateurs (2) ➂ setw : longueur d une chaîne de caractères la donnée qui suit ce manipulateur est affichée sur (au moins) le nombre de caractères spécifiés avec un cadrage à droite. Ceci est pratique pour représenter des nombre en colonnes : Manipulateur setw Autre exemple : for (int i(1); i < 5; ++i) { cout << i << " " << setw(i) << 8 << endl; constexpr int col1(14); constexpr int col2(5); cout << setw(col1) << "un :" << setw(col2) << 1 << endl; cout << setw(col1) << "cent deux :" << setw(col2) << 102 << endl; cout << setw(col1) << "très froid :" << setw(col2) << -18 << endl; cout << setw(col1) << "très très très froid :" << setw(col2) << -273.15 << endl; 1 8 2 8 3 8 4 8 setw peut aussi s utiliser en lecture, pour lire au plus un nombre donné de caractères. string code; cout << "Donnez moi un code de 5 caractères : "; cin >> setw(5) >> code; cout << "lu : " << code << endl; un : 1 cent deux : 102 très froid : -18 très très très froid :-273.15 Donnez moi un code de 5 caractères : abcdefgh lu : abcde Donnez moi un code de 5 caractères : ab lu : ab Informatique I Cours 11 & 12 : Entrées/Sorties 29 / 41 Informatique I Cours 11 & 12 : Entrées/Sorties 30 / 41 Manipulateurs (3) Manipulateurs (4) ➃ setfill : change le caractère utilisé pour remplir les alignements (par défaut c est l espace) int const col1(14); int const col2(5); cout << setw(col1) << "un :" << setfill('.') << setw(col2) << 1 << endl << setfill(' '); cout << setw(col1) << "cent deux :" << setfill('.') << setw(col2) << 102 << endl << setfill(' '); cout << setw(col1) << "très froid :" << setfill('.') << setw(col2) << -18 << endl; Les flots d entrée ont aussi le manipulateur suivant, qui peut s avérer utile : ➄ ws : saute tous les caractères blancs cin >> ws; getline(cin, phrase); un :.1 cent deux :..102 très froid :..-18 Informatique I Cours 11 & 12 : Entrées/Sorties 31 / 41 Informatique I Cours 11 & 12 : Entrées/Sorties 32 / 41

Les options des flots option de flot (2) Les options de flots sont configurées avec la fonction setf, de la façon suivante : flot.setf(ios::option) ; Quelques options : ➀ showpoint : affiche explicitement la partie fractionnaire des nombres réels ; cout.setf(ios::showpoint); cout << 16.0 << ", " << 16.1 << ", " << 16 << endl; 16.0000, 16.1000, 16 ➂ fixed/scientific : affichage fixe ou scientifique (en puissance de 10) des nombres cout.setf(ios::fixed); cout << sqrt(200) << endl; 14.14214 ➁ showbase : affiche la base numérique du nombre ; cout.setf(ios::showbase); cout << 16 << ", " << hex << 16 << ", " << oct << 16 << dec << endl; cout.setf(ios::scientific); cout << sqrt(200) << endl; 1.41421e+01 16, 0x10, 020 Informatique I Cours 11 & 12 : Entrées/Sorties 33 / 41 Informatique I Cours 11 & 12 : Entrées/Sorties 34 / 41 option de flot (3) Manipulateur ou option? ➃ left : affichage à gauche cout << setw(15) << "abcde" << "x" << endl; cout << setw(15) << "ab" << "x" << endl; cout.setf(ios::left); cout << setw(15) << "abcde" << "x" << endl; cout << setw(15) << "ab" << "x" << endl; abcde ab abcdex abx x x out << hex out.setf(ios::hex, ios::basefield) out << oct out.setf(ios::oct, ios::basefield) out << dec out.setf(ios::dec, ios::basefield) out << setprecision(p) out.precision(p) out << setw(w) out.width(p) out << setfill(c) out.fill(c) in >> ws out << showbase out.setf(ios::showbase) out << showpoint out.setf(ios::showpoint) out << fixed out.setf(ios::fixed, ios::floatfield) out << scientific out.setf(ios::scientific, ios::floatfield) out << left out.setf(ios::left, ios::adjustfield) out << right out.setf(ios::right, ios::adjustfield) Pour annuler une option faire : flot.unsetf(ios::option ) ; Informatique I Cours 11 & 12 : Entrées/Sorties 35 / 41 Informatique I Cours 11 & 12 : Entrées/Sorties 36 / 41

Les entrées/sorties Clavier / Terminal : cin / cout et cerr Fichier de définitions : #include <iostream> Utilisation : écriture : cout << expr1 << expr2 << ; lecture : cin >> var1 >> var2 >> ; Saut à la ligne : endl Lecture d une ligne entière : getline(cin, string);....................................................................................... : Manipulateurs #include <iomanip> cout << manip << expr << dec, oct, hex changement de base setprecision(int) nombre de chiffres à afficher setw(int) largeur de colonne nombre de caractères à lire setfill(char) caractère utilisé dans l alignement cin >> ws saute les blancs Options setf(ios::option ) unsetf(ios::option ) ios::left alignement à gauche ios::showbase afficher la base ios::showpoint afficher toujours la virgule ios::fixed notation fixe ios::scientific notation scientifique : Les entrées/sorties (2) Fichier de définitions : #include <fstream> Flot d entrée (similaire à cin) : ifstream Flot de sortie (similaire à cout) : ofstream Création : type_flot nom_de_flot; Lien (ouverture) : flot.open("fichier"); ouverture en binaire : pour lecture : ifstream flot("fichier", ios::in ios::binary); pour écriture : ofstream flot("fichier", ios::out ios::binary); Utilisation : comme cin et cout : flot << expression << ; flot >> variable_lue >> ; Test d échec de ouverture/lecture/écriture sur le flot : flot.fail() Fermeture du fichier : flot.close() Test de fin de fichier : flot.eof() Informatique I Cours 11 & 12 : Entrées/Sorties 37 / 41 Informatique I Cours 11 & 12 : Entrées/Sorties 38 / 41 Flots dans des chaînes Flots dans des chaînes (2) Supposons que l on écrive un programme avec une interface graphique que nous gérons nous-même dans le programme. On ne voudra évidement pas envoyer nos messages sur cout mais dans notre interface. #include <sstream> Comment faire pour avoir accès aux messages que l on envoie sur cout? avec des flots dans des chaînes de caractères : les stringstream Ils se manipulent comme les flots précédemment vus sauf qu ils sont associés à des string void mon_interface(string a_afficher); ostringstream message; int nb_carottes; message << "Vous avez " << nb_carottes << " légumes."; Pour pouvoir les utiliser il faut inclure le fichier de définition sstream : #include <sstream> Pour écrire dans un tel flot, utiliser ostringstream. Par contre, pour lire depuis une chaîne (c.-à-d. simuler avec une chaîne de caractères l entrée standard), utiliser istringstream. mon_interface(message.str()); Notez l emploi de la fonction spécifique str() pour effectivement transformer le contenu du flot en string. Informatique I Cours 11 & 12 : Entrées/Sorties 39 / 41 Informatique I Cours 11 & 12 : Entrées/Sorties 40 / 41

Flots dans des chaînes (3) Un exemple avec istringstream : convertir une chaîne de caractères en entiers : int str2int(string const& str) { int extracted(0); istringstream is(str); is >> extracted; return extracted; Informatique I Cours 11 & 12 : Entrées/Sorties 41 / 41