Nous avons vu que lon pouvait formater de différentes façons les entrées-sorties à laide du champ de format, du champ de largeur et du champ de remplissage.
Cependant, des écritures faisant fréquemment intervenir des modifications de ces champs deviennent vite assez lourdes. Pour les simplifier, on dispose de manipulateurs. Ceux qui sont définis dans <iostream.h>
sont les suivants :
endl | (sorties) Passe à la ligne et vide le tampon. |
ends | (sorties) Insère un caractère nul. |
flush | (sorties) Vide le tampon. |
dec | Mode décimal. |
hex | Mode hexadécimal. |
oct | Mode octal. |
ws | (entrées) Supprime les espaces. |
Pour les employer, il suffit de les écrire sur le flot de la même façon quun objet normal, au moment où lon souhaite changer le mode. Par exemple, lécriture suivante :
cout.setf(ios::dec, ios::basefield);cout << i;cout.setf(ios::hex, ios::basefield);cout << j << '\n';
sera plus élégante ainsi :
cout << dec << i << hex << j << endl;
avec le même effet.
Le fichier <iomanip.h>
fournit des manipulateurs supplémentaires prenant des paramètres :
setbase(int) | Fixe la base décriture ou de lecture ; les valeurs admises sont 8 (octal), 10 (décimal), 16 (hexadécimal), et 0 qui indique un comportement standard : sorties en décimal sauf pour les pointeurs, entrées suivant le préfixe. |
setfill(char) | Fixe le caractère de remplissage. |
setprecision(int) | Fixe la précision (nombre de décimales en virgule flottante). |
setw(int) | Fixe le champ de largeur width . |
resetiosflags(long) | Met à zéro dans le champ de forme les bits qui sont à 1 dans le paramètre. |
setiosflags(long) | Met à 1 dans le champ de forme les bits qui sont à 1 dans le paramètre. |
On pourra donc écrire par exemple :
int i = 32;cout << setfill('*') << setw(9) << hex << i;// écrit : *******20double d = 1/3.141592;cout << setprecision(3) << d;// écrit : 0.318
Nous terminons ce chapitre avec un exercice assez difficile, où le lecteur pourra exercer sa sagacité...
Exercice 9.2 | Sans aller regarder dans les fichiers den-têtes, comment implanteriez-vous ces manipulateurs afin de permettre de telles écritures ? Indication : cest beaucoup plus facile pour les manipulateurs sans paramètres. |
Voir solution |
Précédent | Sommaire | Suivant |