Manipulateurs de flux
Manipulateurs de flux
La librairie standard définit tout un jeu de manipulateurs extrêmement utiles pour définir les options de formatage et pour effectuer des opérations de base sur les flux. Le symbole endl, par exemple, utilisé pour effectuer un retour à la ligne dans les opérations d’écriture sur les flux de sortie n’est rien d’autre qu’un manipulateur. Son rôle consiste simplement à écrire le caractère de retour à la ligne et à appeler la méthode flush() du flux de sortie (méthode qui déclenche le transfert du contenu du flux).Les manipulateurs sont définis, selon leur type, soit dans l’en-tête de déclaration du flux, soit dans l’en-tête ios, soit dans l’en-tête iomanipxe "iomanip".
Le tableau 2.3 présente les manipulateurs les plus simples qui ne prennent pas de paramètre.
Tableau 2.3 : manipulateurs des flux de sortie
Manipulateur | Description |
---|---|
endl | Envoie un caractère de retour à la ligne sur le flux et synchronise le tampon par un appel à la méthode flush() |
ends | Envoie un caractère nul terminal de fin de ligne sur le flux |
flush | Synchronise le tampon utilisé par le flux par un appel à la méthode flush() |
boolalpha | Affiche les booléens sous forme textuelle |
noboolalpha | Désactive l’affichage en mode texte des booléens |
hex | Formate les nombres en base 16 |
oct | Formate les nombres en base 8 |
dec | Formate les nombres en base 10 |
fixed | Utilise la notation en virgule fixe pour les nombres à virgule |
scientific | Utilise la notation en virgule flottante pour les nombres à virgule |
left | Aligne les résultats à gauche |
right | Aligne les résultats à droite |
internal | Complète la représentation de la variable avec des espaces complémentaires à une position fixe déterminée par la locale courante. Si cette dernière ne spécifie aucune position de remplissage particulière, le remplissage s’effectue à droite par défaut |
showbasexe | Indique la base de calcul utilisée |
noshowbase | N’indique pas la base de calcul utilisée |
showpoint | Utilise le séparateur de virgule dans les nombres à virgule, même si la partie fractionnaire est nulle |
noshowpoint | N’utilise le séparateur de virgule que si la partie fractionnaire des nombres flottants est significative |
showpos | Écrit systématiquement le signe des nombres, même s’ils sont positifs |
noshowpos | N’écrit le signe des nombres que s’ils sont négatifs |
uppercase | Écrit les exposants et les chiffres hexadécimaux en majuscules |
nouppercase | Écrit les exposants et les chiffres hexadécimaux en minuscules |
unitbuf | Effectue une opération de synchronisation du cache géré par le tampon du flux après chaque écriture |
nounitbuf | N’effectue les opérations de synchronisation du cache géré par le tampon du flux que lorsque cela est explicitement demandé |
Code 2.7 : utilisation des manipulateurs sur un flux de sortie
#include <iostream> #include <iomanip> using namespace std; int main() { cout << "On affiche le booléen true sous forme textuelle: tt"; cout << boolalpha << true << endl; cout << "On repasse en mode binaire pour "; cout << "afficher le booléen false: t"; cout << noboolalpha << false << endl; cout << "Hex permet aussi d’afficher les booléens "; cout << "en mode binaire: t"; cout << hex << false << endl; cout << "On écrit le nombre 63 en hexadécimal: tttt"; cout << hex << 63 << endl; cout << "En majuscules: ttttttt"; cout << uppercase << 63 << endl; cout << "On repasse en base 10 pour afficher 63: ttt"; cout << dec << 63 << endl; cout << "Avec le signe: ttttttt"; cout << showpos << 63 << endl; cout << "On affiche un flottant sur 15 caractères minimum, n"; cout << "en remplissant les vides avec des *: ttt"; cout << setfill(‘*’) << setw(15) << 3.151592 << endl; cout << "On recommence avec un alignement à gauche,n"; cout << "sans le signe: tttttt"; cout << left << noshowpos << setw(15) << 3.151592 << endl; }
L’exécution de ce programme donne le résultat suivant :
On affiche le booléen true sous forme textuelle: true On repasse en mode binaire pour afficher le booléen false: 0 Hex permet aussi d’afficher les booléens en mode binaire: 0 On écrit le nombre 63 en hexadécimal: 3f En majuscules: 3F On repasse en base 10 pour afficher 63: 63 Avec le signe: +63 On affiche un flottant sur 15 caractères minimum, en remplissant les vides avec des *: ********+3.15159 On recommence avec un alignement à gauche, sans le signe: 3.15159********
Le texte original de cette fiche pratique est extrait de
«Tout sur le C++» (Christine EBERHARDT, Collection
CommentCaMarche.net, Dunod, 2009)