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 La communication avec lextérieur. Lecture de données à partir du clavier. Affichage des données à lécran. Formatage des.

Présentations similaires


Présentation au sujet: "Lecture et écriture de données La communication avec lextérieur. Lecture de données à partir du clavier. Affichage des données à lécran. Formatage des."— Transcription de la présentation:

1 Lecture et écriture de données La communication avec lexté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 2 Entrées / sorties avec C Comme le langage PASCAL, C ne renferme pas dinstructions dentrées / sorties comme faisant partie du langage. Ainsi, on sassure de lindépendance de C avec lenvironnement matériel. Les outils de base sont disponibles dans la librairie stdio. Pour utiliser ces outils, il faut donc inclure cette librairie : #include Affichage dun 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 dabord converti en un entier. Caractères spéciaux : \nsaut de ligne \tusage du tabulateur

3 3 Écriture dun caractère : exemple #include 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('?'); putchar('\n');// Saut de ligne. i = putchar(225);// Caractère ' '. putchar(i - 125);// Caractère 'd'. putchar('\n');// Saut de ligne. } Un= 1 ? d

4 4 Lecture dun caractère Lecture du prochain caractère du fichier dentrée standard et retourne le code entier représentant ce caractère : int getchar(); #include 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); putchar('\n');// Saut de ligne. } Un= 1 ? Un=1?

5 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. Les données lues permettent dinitialiser ces variables. Ladresse dune variable est indiquée par le nom de la variable précédé du signe &. #include void main() { int jour, mois, annee, k; k = scanf("%i %i %i", &jour, &mois, &annee); if(k == 3) { putchar('O'); putchar('K'); putchar('\n'); } Exemple : Cela lit 3 entiers signés, séparés par des espaces, tabulations ou sauts de ligne. Retourne le # de lectures réussies.

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

7 7 Lecture formatée de données Si le format de lecture des données contient des caractères autres que lespace, un tabulateur ou une fin de ligne, alors ces symboles doivent être introduits exactement dans lordre indiqué. #include 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/1980Données invalides : /04/ /4 /1980 scanf sarrête si le format de lecture a été traité jusquau bout ou si une donnée ne correspond pas au format indiqué. scanf retourne le # darguments correctement reçus et affectés.

8 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 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 ny a pas dautres paramètres. Si le nombre n dexpressions est plus élevé que ce qui est prévu dans le format décriture, ces dernières expressions sont ignorées.

9 9 Formatage de données en écriture %caractère# minimumprécisionh ou l L type de de de contrôlecaractèresconversion à limpression Indique le début dun formatage 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 Optionnel :.n signifie que lon opte pour une précision de n chiffres après le point. Il sagit de définir de quelle façon une donnée sera interprétée.

10 10 Formatage de données en écriture Caractères de contrôle : +Sassure quun signe précède toujours une valeur numérique signée. -Opte pour une justification à gauche avec lespace 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. espaceune valeur positive ou nulle sera précédée dun espace plutôt que dun signe +. Type de conversion : entiers : dvaleur entière décimale signée ovaleur entière octale non signée uvaleur entière décimale non signée xvaleur entière hexadécimale non signée avec les chiffres a, b, c, d, e, f Xidem avec les chiffres A, B, C, D, E, F. caractères : c un caractère sune chaîne de caractères. réels : fvaleur réelle signée evaleur réelle signée avec un exposant e Eidem mais avec E gidem à e ou f selon la précision et la dimension de la valeur réelle Gidem à g mais avec E sil y a lieu.

11 11 Caractères déchappement Dans le format décriture des données de linstruction printf, on peut utiliser des caractères déchappement : \asignal sonore \befface le caractère qui précède le curseur (« backspace ») \npasse à la ligne suivante \tusage du tabulateur \\,%, \"pour afficher le caractère \, % ou ". Exemples : #include 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 12 Exemple dentrées / sorties Exemple : #include 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"); k = scanf("%i %i", &A, &B); } printf("%i fois %i est %li\n", A, B, (long) A * B);

13 13 Exemple dentrées / sorties Exemple : 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 : fois 567 est Entrez un caractere : a Le caractere a a le code e e e+001

14 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 cest-à-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 dentrée (clavier, fichier, mémoire). Ex.: 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. En C++, tous les flux sont représentés par des classes qui font partie de la librairie iostream (input-output stream, pour flux dentrées/sorties). #include La gestion des flux se caractérise par une lecture/écriture séquentielle des données.

15 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 dune arborescence: ios classe de base qui regroupe les caractéristiques communes aux flux istreamostream classe de base du flux dentrée classe de base du flux de sortie ifstreamiostreamofstream flux de sortie sur fichier flux dentrée sur fichier canaux standards

16 16 Opérateurs dentré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 dun flux dentrée. Lopérande de gauche de lopérateur << doit correspondre à un objet de la classe ostream (cout par exemple). Lopérande de gauche de lopé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 dentrée standard (clavier par défaut) (dérivée de la classe istream) cerr:désigne la sortie erreur standard (écran par défaut) (dérivée de la classe ostream) clog:permet à la fois denvoyer des messages derreurs vers la sortie erreur standard (écran par défaut) et de remplir un fichier de log (fichier dalerte) (dérivée de la classe ostream)

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

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

19 19 Usage de manipulateurs avec cout ManipulateurObjectif Note : Pour employer un manipulateur de flux paramétré, vous devez inclure : #include. Ex.: endl nest pas un manipulateur de flux paramétré.

20 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 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 : PI :

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

23 23 Usage de fonctions avec cout #include 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 Ex.: Utilisation de la fonction setf() pour modifier lalignement des colonnes affichées i.e. choisir daligner à gauche ou à droite les éléments affichés. cout.setf(ios::right, ios::adjustfield); cout << setw(12) << "AAA" << endl; cout << setw(12) << "BBBBBB" << endl; AAA BBBBBB alignement à droite sous réserve que la taille daffichage soit spécifiée Alignement à gauche : cout.setf(ios::left, ios::adjustfield); Note : Dautres options sont disponibles : ios::showpoint afficher les zéros de droite (20.00 au lieu de 20), ios::showposafficher le signe + devant les nombres positifs, ios::hexafficher le nombre en base 16, ios::scientificafficher une valeur à virgule flottante en notation scientifique, ios::fixedafficher une valeur à virgule flottante en notation à virgule fixe.

25 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 26 Saisie au clavier avec cin Lobjet cin est employé pour saisir des informations au clavier. défini à partir dune classe dérivée de istream. utilise lopé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 27 Saisie au clavier avec cin Il ny a pas de contrôle de type au moment de la saisie. La variable sera considérée invalide uniquement à lissue de la saisie. Il est donc possible de saisir des caractères dans une variable entière. #include void main() { char c; while (true) { cin >> c; if (c == '.') break; cout << c; } Fait abstraction des espaces. a c def. acdef

28 28 Saisie au clavier avec la fonction get de cin get avec un paramètre de type char permet dexaminer 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 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 29 Saisie au clavier avec les fonctions ignore, peek et putback de cin La fonction ignore permet dignorer 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 dexaminer sans extraire le prochain caractère. Ex.: #include void main() { char c; while (true) { if( cin.peek() == '.') break; cin >> c; cout << c; } abcdef. abcdef

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

31 31 Saisie au clavier avec les fonctions ignore, peek et putback de cin #include 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, '#'); } Exemple : Ceci# est!un! essai##!. Ceci est$un$ essai$


Télécharger ppt "Lecture et écriture de données La communication avec lextérieur. Lecture de données à partir du clavier. Affichage des données à lécran. Formatage des."

Présentations similaires


Annonces Google