La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Lecture et écriture de données

Présentations similaires


Présentation au sujet: "Lecture et écriture de données"— Transcription de la présentation:

1 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++.

2 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

3 É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

4 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 ?

5 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.

6 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.

7 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/04/ /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.

8 É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.

9 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

10 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.

11 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.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", , , , , ); }

12 Exemple d’entrées / sorties
#include <stdio.h> void main() { int A, B; int k; char caractere; float C = f; double D = ; 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);

13 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 fois 567 est Entrez un caractere : a Le caractere a a le code 97. e e e+001

14 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.

15 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

16 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)

17 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.

18 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:

19 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é.

20 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.

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

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

23 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 = i + 1 = 124i + 2 = 00125

24 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.

25 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 : Decimal : Decimal : Decimal :

26 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;

27 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

28 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');

29 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

30 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

31 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$


Télécharger ppt "Lecture et écriture de données"

Présentations similaires


Annonces Google