Manipulateurs de flux

Décembre 2016

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

ManipulateurDescription
endlEnvoie un caractère de retour à la ligne sur le flux et synchronise le tampon par un appel à la méthode flush()
endsEnvoie 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()
boolalphaAffiche les booléens sous forme textuelle
noboolalphaDésactive l’affichage en mode texte des booléens
hexFormate les nombres en base 16
octFormate les nombres en base 8
decFormate les nombres en base 10
fixedUtilise la notation en virgule fixe pour les nombres à virgule
scientific Utilise la notation en virgule flottante pour les nombres à virgule
leftAligne les résultats à gauche
rightAligne les résultats à droite
internalComplè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
showbasexeIndique la base de calcul utilisée
noshowbaseN’indique pas la base de calcul utilisée
showpointUtilise 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
noshowposN’é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
unitbufEffectue une opération de synchronisation du cache géré par le tampon du flux après chaque écriture
nounitbufN’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)

A voir également :

Ce document intitulé «  Manipulateurs de flux  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.