Manipulateurs

Nous avons vu que l’on pouvait formater de différentes façons les entrées-sorties à l’aide 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 qu’un objet normal, au moment où l’on 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 d’en-têtes, comment implanteriez-vous ces manipulateurs afin de permettre de telles écritures ? Indication : c’est beaucoup plus facile pour les manipulateurs sans paramètres.

Voir solution
Précédent Précédent Sommaire Sommaire Suivant Suivant