Lecture et écriture de données

Slides:



Advertisements
Présentations similaires
Premier programme en C :
Advertisements

La boucle for : init7.c et init71.c
Introduction au Langage C,C++
Développement logiciel sur micro-contrôleurs PIC en C
GEF 243B Programmation informatique appliquée Types dérivés, structures et tableaux §
GEF 243B Programmation informatique appliquée Expressions de type mixte et blocs §
GEF 243B Programmation informatique appliquée
C.
M. BENJELLOUN : Info II Mohammed BENJELLOUN Service dInformatique Faculté Polytechnique de Mons
FLSI602 Génie Informatique et Réseaux
Points importants de la semaine Les types arithmétiques. Les opérateurs.
Regrouper des éléments de même type et pouvoir y accéder à laide dun identificateur et dun indice. Objectif des tableaux.
Récursivité.
Points importants de la semaine Les boucles. Les types arithmétiques. Les opérateurs.
Chapitre IV LES STRUCTURES SIMPLES. Plan I- Les entrées II- Laffectation III- Les sorties.
Les éléments de base de l’algorithmique
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
TRAITEMENT DE STRUCTURES
Introduction à la programmation (Java)
Leçon 2 : Surcharge des opérateurs IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
CHAINE DE CARACTERES : Définition :
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Test et débogage Tests unitaires. Gestion d’erreurs. Notion d’état, de pré-condition et de post-condition. Assertion. Traces de programme. Débogueur et.
Structures de données IFT Abder Alikacem La classe string Département dinformatique et de génie logiciel Édition Septembre 2009 Département dinformatique.
Structures de données IFT-2000
Points importants de la semaine Le préprocesseur. La conversion de types. Les fonctions.
GPA435, GPA – ÉTS, T. Wong Génie de la production automatisée GPA435 Système dexploitation et programmation de système Chapitre 6 Partie II 2014.
IFT 6800 Atelier en Technologies d’information
Les Fichiers.
COURS DE PROGRAMMATION ORIENTEE OBJET :
Programme de baccalauréat en informatique Programmation Orientée Objets IFT Thierry EUDE Module 6. Gestion des erreurs et des exceptions : Fonctionnement.
LANGAGE C LP A2I IUT St DIE
Tableaux Introduction aux tableaux à une dimension. Déclaration, stockage, initialisation et accès en lecture ou en écriture aux composantes d’un tableau.
Procédures et fonctions
Plan cours La notion de pointeur et d’adresse mémoire.
Types de données fondamentaux
Les fichiers texte en C++
Faculté Polytechnique de Mons
L’essentiel du langage C
Animateur : Med HAIJOUBI
Structures des données
Chapitre IX Gestion de flux.
SIF-1053 Architecture des ordinateurs
8PRO107 Éléments de programmation Les chaînes de caractères.
Un survol du language C.
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
Sémantique des instructions pour le langage Z minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Les types composés Les enregistrements.
Fiabilisation des lectures au clavier. Problèmes liés à scanf: rencontre de caractères invalides Sans arrêt prématuré: compte = scanf(``%d%c``;&n,&c);
Le Préprocesseur. Sujets abordés: Préprocesseur –Qu’est ce? –Qu’est ce qu’une directive? Les macros –Les définir, les redéfinir, les dé-définir –Les macros.
Conception de Programmes - IUT de Paris - 1ère année – Cours 8 – Les entrées/sorties Comment fonctionnent les opérateurs > pour les types élémentaires.
Les variables fichiers. Le type fichier On manipule les fichiers par l’intermédiaire de structures FILE décrites dans stdio.h FILE *monFichier; –Nom physique.
Introduction au langage C Les entrées-sorties
1. Spoon Christophe Delagarde, septembre 1998 I.U.T., Université de la Méditerrainée 2.
Conception de Programmes - IUT de Paris - 1ère année Conception de Programmes Objectifs et organisation du cours Introduction à la P.O.O.
Conception de Programmes - IUT de Paris - 1ère année Quelques éléments du langage C++ Les références La surcharge de fonctions Les fonctions «
Les entrées-sorties élémentaires
8PRO107 Éléments de programmation Les adresses et les pointeurs.
PRO-1027 Programmation Scientifique en C
Tour rapide d’un premier programme SPARC v9
Langage de Programmation Orientée Objet : C++
Chapitre 9 Les caractères.
Philippe Gandy - 8 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Objets et Actions Élémentaires.
Philippe Gandy – 10 novembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Introduction au langage C
L ES INSTRUCTIONS DE L ECTURE, E CRITURE ET A FFECTATION Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie – Université.
Transcription de la présentation:

Lecture et écriture de données La communication avec l’extérieur. Lecture de données à partir du clavier. Affichage des données à l’écran. Formatage des données. Parallèle entre les langages C et C++.

Entrées / sorties avec C Comme le langage PASCAL, C ne renferme pas d’instructions d’entrées / sorties comme faisant partie du langage. Ainsi, on s’assure de l’indépendance de C avec l’environnement matériel. Les outils de base sont disponibles dans la librairie stdio. Pour utiliser ces outils, il faut donc inclure cette librairie : #include <stdio.h> Affichage d’un caractère à partir du code entier c (un entier entre 0 et 255) représentant ce caractère : int putchar(c); La fonction putchar retourne ensuite le code entier c. Si c est de type char, il est d’abord converti en un entier. Caractères spéciaux : \n saut de ligne \t usage du tabulateur

Écriture d’un caractère : exemple #include <stdio.h> void main() { char A = 'A'; char B = '='; int C = '1'; int i; putchar('U'); putchar('n'); putchar('\t'); // Utilisation du tabulateur. putchar(B); putchar(' '); putchar(C); putchar('\n'); // Saut de ligne. putchar('?'); i = putchar(225); // Caractère ''. putchar(i - 125); // Caractère 'd'. } Un = 1 ? d

Lecture d’un caractère Lecture du prochain caractère du fichier d’entrée standard et retourne le code entier représentant ce caractère : int getchar(); #include <stdio.h> void main() { char A, B, C, D; int E; A = getchar(); B = getchar(); C = getchar(); D = getchar(); E = getchar(); putchar(A); putchar(B); putchar('\t'); // Utilisation du tabulateur. putchar(C); putchar(' '); putchar(D); putchar('\n'); // Saut de ligne. putchar(E); } Un=1? Un = 1 ?

Lecture formatée de données Syntaxe : int scanf("format de lecture des données ", adresse de la variable 1, adresse de la variable 2, …, adresse de la variable n); Cela détermine comment les données lues doivent être interprétées. Exemple : Les données lues permettent d’initialiser ces variables. L’adresse d’une variable est indiquée par le nom de la variable précédé du signe &. #include <stdio.h> void main() { int jour, mois, annee, k; k = scanf("%i %i %i", &jour, &mois, &annee); if(k == 3) putchar('O'); putchar('K'); putchar('\n'); } Retourne le # de lectures réussies. Cela lit 3 entiers signés, séparés par des espaces, tabulations ou sauts de ligne.

Formatage de données en lecture % * # de caractères lus h ou l L type de conversion Optionnel : h = short (d i o u x) l ou L = long (int) ou double (float) Indique le début d’un formatage Optionnel : Indique que la donnée d’entrée sera ignorée. Optionnel : Indique le # de caractères en entrée(1). d ou i int o int (les chiffres sont assumés en base 8) u unsigned int x int (les chiffres sont assumés en base 16) c char (l’espace est inclus) s chaîne de caractères (excluant l’espace) e, f ou g float (E, e ou . sont optionnels). (1) Les données peuvent être saisies sans espaces entre elles. Note : Une suite d’espaces, de tabulateurs ou de sauts de lignes est équivalent à un espace dans le fichier d’entrée.

Lecture formatée de données Si le format de lecture des données contient des caractères autres que l’espace, un tabulateur ou une fin de ligne, alors ces symboles doivent être introduits exactement dans l’ordre indiqué. #include <stdio.h> void main() { int jour, mois, annee; int k; k = scanf("%i/%i/%i", &jour, &mois, &annee); if(k == 3) putchar('O'); putchar('K'); putchar('\n'); } Données valides : 12/4/1980 Données invalides : 12 4 1980 12/04/1980 12 /4 /1980 scanf s’arrête si le format de lecture a été traité jusqu’au bout ou si une donnée ne correspond pas au format indiqué. scanf retourne le # d’arguments correctement reçus et affectés.

Écriture formatée de données Syntaxe : int printf("format d’écriture des données ", expression 1, expression 2, …, expression n); Les valeurs de expression 1, expression 2, …, expression n correspondent aux données à afficher et doivent coïncider avec le format d’écriture précédent. #include <stdio.h> void main() { int jour, mois, annee; int k; k = scanf("%i/%i/%i", &jour, &mois, &annee); if(k == 3) printf("jour = %i, mois = %i, annee = %i\n", jour, mois, annee); else printf("Format invalide de donnees en entree.\n"); } Si le format d’écriture est une chaîne de caractères uniquement, alors il n’y a pas d’autres paramètres. Si le nombre n d’expressions est plus élevé que ce qui est prévu dans le format d’écriture, ces dernières expressions sont ignorées.

Formatage de données en écriture % caractère # minimum précision h ou l L type de de de contrôle caractères conversion à l’impression Il s’agit de définir de quelle façon une donnée sera interprétée. Indique le début d’un formatage Optionnel : .n signifie que l’on opte pour une précision de n chiffres après le point. Optionnel : 4 caractères sont disponibles. Optionnel : Si cela exige davantage de caractères, les besoins sont comblés. Optionnel : h = short l = long L = long double

Formatage de données en écriture Caractères de contrôle : + S’assure qu’un signe précède toujours une valeur numérique signée. - Opte pour une justification à gauche avec l’espace comme caractère de remplissage (le mode de justification à droite est celui par défaut). # la lettre O va précéder une valeur en base 8, les lettres Ox ou OX vont précéder une valeur hexadécimale. espace une valeur positive ou nulle sera précédée d’un espace plutôt que d’un signe +. Type de conversion : réels : entiers : f valeur réelle signée e valeur réelle signée avec un exposant e E idem mais avec E g idem à e ou f selon la précision et la dimension de la valeur réelle G idem à g mais avec E s’il y a lieu. d valeur entière décimale signée o valeur entière octale non signée u valeur entière décimale non signée x valeur entière hexadécimale non signée avec les chiffres a, b, c, d, e, f X idem avec les chiffres A, B, C, D, E, F. caractères : c un caractère s une chaîne de caractères.

Caractères d’échappement Dans le format d’écriture des données de l’instruction printf, on peut utiliser des caractères d’échappement : \a signal sonore \b efface le caractère qui précède le curseur (« backspace ») \n passe à la ligne suivante \t usage du tabulateur \\,%%, \" pour afficher le caractère \, % ou ". 123 1234 12345 100.123000 100.12 100 1.235 0.0000 Exemples : #include <stdio.h> void main() { printf("%4d\n%4d\n%4d\n", 123, 1234, 12345); printf("%f\n%12f\n%.2f\n%5.0f\n%10.3f\n%.4f\n", 100.123, 100.123, 100.123, 100.123, 1.23456); }

Exemple d’entrées / sorties #include <stdio.h> void main() { int A, B; int k; char caractere; float C = 12.3456f; double D = 12.123456789; long double E = 12.3; printf("Entrez 2 entiers au clavier : \n"); k = scanf("%i %i", &A, &B); while(k != 2) printf("Donnees invalides. Recommencez...\n"); } printf("%i fois %i est %li\n", A, B, (long) A * B);

Exemple d’entrées / sorties printf("Entrez un caractere : \n"); scanf("\n%c", &caractere); printf("Le caractere %c a le code %i.\n", caractere, caractere); printf("%f %f %f\n", C, D, E); printf("%e %e %e\n", C, D, E); } Entrez 2 entiers au clavier : 1234 567 1234 fois 567 est 699678 Entrez un caractere : a Le caractere a a le code 97. 12.345600 12.123457 12.300000 1.234560e+001 1.212346e+001 1.230000e+001

Généralités sur les flux en C++ Un flux ou canal de données représente un ensemble de données pouvant être manipulé à la fois en lecture et en écriture. Offre une transparence vis-à-vis de la source ou de la destination des données c’est-à-dire un programme peut utiliser les mêmes instructions de manipulation de flux pour tous les types de flux de sortie (écran, fichier, mémoire) pour tous les types de flux d’entrée (clavier, fichier, mémoire). Un programme peut utiliser les mêmes instructions pour afficher des données à l’écran ou pour écrire ces données dans un fichier sur le disque dur. Ex.: En C++, tous les flux sont représentés par des classes qui font partie de la librairie iostream (input-output stream, pour flux d’entrées/sorties). #include <iostream.h> La gestion des flux se caractérise par une lecture/écriture séquentielle des données.

Généralités sur les flux en C++ Ces classes correspondent aux différents types de flux et sont présentées sous la forme d’une arborescence: classe de base qui regroupe les caractéristiques communes aux flux ios classe de base du flux d’entrée istream ostream classe de base du flux de sortie flux d’entrée sur fichier flux de sortie sur fichier ifstream iostream ofstream canaux standards

Opérateurs d’entrées / sorties en C++ Toutes les classes de la librairie iostream disposent de 2 opérateurs surchargés: << écrire vers un flux de sortie >> lire à partir d’un flux d’entrée. L’opérande de gauche de l’opérateur << doit correspondre à un objet de la classe ostream (cout par exemple) . L’opérande de gauche de l’opérateur >> doit correspondre à un objet de la classe istream (cin par exemple). C++ fournit 4 flux prédéfinis: cout: correspond au flux de sortie standard (écran par défaut) (dérivée de la classe ostream) cin: désigne le flux d’entrée standard (clavier par défaut) (dérivée de la classe istream) cerr: désigne la sortie erreur standard (écran par défaut) clog: permet à la fois d’envoyer des messages d’erreurs vers la sortie erreur standard (écran par défaut) et de remplir un fichier de log (fichier d’alerte) (dérivée de la classe ostream)

Surcharge avec les types de données de base Ces 2 opérateurs << et >> ont été définis pour les types de données suivants: char, short, int, long, float, double, long double, char * et void *. À plus tard. comme par exemple, cout << 'a' << 25; cin >> i ; // i est une variable de type int. On peut donc lire et écrire des variables de ces différents types de données à l’aide de ces 2 opérateurs. Les opérateurs << et >> peuvent être utilisés en cascade. Ex. : cout << a << b; En C++, les opérations d’entrées / sorties s’effectuent automatiquement en fonction du type de données. S’il n’y a pas concordance, le compilateur génère une erreur. En C++, même si les outils d’E/S de C sont disponibles, ne les utilisez pas.

Affichage à l’écran avec cout Ex.: #include <iostream.h> void main() { int entier = 12; char c = 'A'; cout << "\n\tEntier : " << entier << '\n'; cout << "\tCaractere : " << c << endl; } saut de ligne Usage du tabulateur La librairie iostream fournit un certain nombre d’attributs ou de paramètres qui permettent de modifier les caractéristiques d’un flux. cout << manipulateur; Syntaxe:

Usage de manipulateurs avec cout Objectif Note : Pour employer un manipulateur de flux paramétré, vous devez inclure : #include <iomanip>. Ex.: endl n’est pas un manipulateur de flux paramétré.

Usage de manipulateurs avec cout Ex.: int Entier = 15; …….. cout << "Conversions" << endl; cout << "Entier : " << Entier << endl; cout << "Hexa : " << hex << Entier << endl; cout << "Oct : " << oct << Entier << endl; cout << dec; Conversions Entier : 15 Hexa : f Oct : 17 On repasse en base décimale.

Usage de manipulateurs avec cout Ex.: float PI = 3.14159; …….. cout << "PI : " << PI << endl; cout << "PI : " << setprecision(3) << PI << endl; cout << "PI : " << setprecision(4) << PI << endl; cout << "PI : " << setprecision(5) << PI << endl; PI : 3.14159 PI : 3.14 PI : 3.142 PI : 3.1416

Usage de fonctions avec cout Fonctions disponibles dans la classe ios Méthode Objectif

Usage de fonctions avec cout #include <iostream.h> void main() { int i = 123; cout << "i = " << i << "i + 1 = " << i + 1 << endl; cout << "i = "; cout.width(6); cout.fill('0'); cout << i; cout << "i + 1 = "; cout << i + 1; cout << "i + 2 = "; cout.width(5); cout << i + 2 << endl; } i = 123i + 1 = 124 i = 000123i + 1 = 124i + 2 = 00125

La fonction setf avec cout Utilisation de la fonction setf() pour modifier l’alignement des colonnes affichées i.e. choisir d’aligner à gauche ou à droite les éléments affichés. Ex.: cout.setf(ios::right, ios::adjustfield); cout << setw(12) << "AAA" << endl; cout << setw(12) <<   "BBBBBB" << endl; alignement à droite AAA BBBBBB sous réserve que la taille d’affichage soit spécifiée Alignement à gauche: cout.setf(ios::left, ios::adjustfield); Note : D’autres options sont disponibles : ios::showpoint afficher les zéros de droite (20.00 au lieu de 20), ios::showpos afficher le signe + devant les nombres positifs, ios::hex afficher le nombre en base 16, ios::scientific afficher une valeur à virgule flottante en notation scientifique, ios::fixed afficher une valeur à virgule flottante en notation à virgule fixe.

La fonction setf avec les paramètres setw et setfill Ex.: float Decimal = 10.25; …….. cout.setf(ios::right, ios::adjustfield); cout <<   "Decimal : "   << setw(8) << Decimal << endl; cout <<   "Decimal : "   << setw(8) << (Decimal + 100) << endl; cout <<   "Decimal : "   << setw(8) << (Decimal+1000) << endl; cout <<   "Decimal : "   << setw(8) << setfill('0') << Decimal << endl; Decimal : 10.25 Decimal : 110.25 Decimal : 1010.25 Decimal : 00010.25

Saisie au clavier avec cin L’objet cin est employé pour saisir des informations au clavier. défini à partir d’une classe dérivée de istream. utilise l’opérateur surchargé >> pour saisir au clavier les valeurs ° des variables de type primaire (char, int, float, etc.) ° des chaînes de caractères. Ex.: int i; char c; float f1, f2; ….. cout << "Saisissez un nombre: " ; cin >> i; cout << "Saisissez un caractere: " ; cin >> c; ….. cout << "Saisissez 2 nombres reels: " ; cout << "Un espace entre les 2 nombres reels: "; cin >> f1 >> f2;

Saisie au clavier avec cin Il n’y a pas de contrôle de type au moment de la saisie. Il est donc possible de saisir des caractères dans une variable entière. La variable sera considérée invalide uniquement à l’issue de la saisie. Fait abstraction des espaces. #include <iostream.h> void main() { char c; while (true) cin >> c; if (c == '.') break; cout << c; } a c def. acdef

Saisie au clavier avec la fonction get de cin get avec un paramètre de type char permet d’examiner chaque caractère, y compris les espaces. La fonction retourne un objet de la classe iostream. char a, b, c; char d, e; cin.get(a).get(b).get(c); cin.get(d) >> e; #include <iostream.h> void main() { char c; while (true) cin.get(c); if (c == '.') break; cout << c; } a c def. a c def Note : put permet d’écrire un caractère : cout.put('O').put('h').put('\n');

Saisie au clavier avec les fonctions ignore, peek et putback de cin La fonction ignore permet d’ignorer les caractères restants sur une ligne. 2 paramètres : le nombre maximum de caractères à ignorer et le caractère de fin. Ex.: cin.ignore(80, '\n'); La fonction peek permet d’examiner sans extraire le prochain caractère. Ex.: #include <iostream.h> void main() { char c; while (true) if( cin.peek() == '.') break; cin >> c; cout << c; } abcdef. abcdef

Saisie au clavier avec les fonctions ignore, peek et putback de cin La fonction putback permet d’insérer un caractère dans le flux d’entrée. Exemple : #include <iostream.h> void main() { char c; while (true) if( cin.peek() == '.') break; cin.get(c); if ( c == 'b') cin.putback('B'); else cout << c; } abcbbdef. aBcBBdef

Saisie au clavier avec les fonctions ignore, peek et putback de cin Exemple : #include <iostream.h> void main() { char c; cout << "Entrez une phrase : "; while (true) cin.get(c); if ( c == '.') break; if ( c == '!') cin.putback('$'); else cout << c; while (cin.peek() == '#') cin.ignore(1, '#'); } Ceci# est!un! essai##!. Ceci est$un$ essai$