Les flots permettent un grand nombre de formatages des données. Il existe un champ de format dans ios
, et une liste de masques unitaires qui lui correspondent, dont voici la signification lorsquils sont à 1 dans ce champ :
ios::skipws | Supprime les espaces (blancs, tabulations, etc.) en lecture. Ce bit est à 1 par défaut, contrairement aux autres. |
ios::left | Ajustement à gauche en écriture. |
ios::right | Ajustement à droite en écriture. |
ios::internal | Remplissage après le signe + ou - , ou lindicateur de base (et non avant). |
ios::dec | Écriture décimale (base 10). |
ios::oct | Écriture en octal (base 8). |
ios::hex | Écriture en hexadécimal (base 16). |
ios::showbase | En écriture, écrire un indicateur de base. |
ios::showpoint | Écrit obligatoirement le point décimal pour les nombres à virgule flottante, même si toutes les décimales sont nulles. |
ios::uppercase | Écrit les lettres A à F en majuscules dans les chiffres hexadécimaux (minuscules sinon). |
ios::showpos | Écrit le signe pour tous les entiers, même positifs. |
ios::scientific | Pour les nombres à virgule flottante, écriture en notation scientifique (1.75e+01 par exemple). |
ios::fixed | Pour les nombres à virgule flottante, écriture en notation à virgule flottante (17.5 avec le même exemple). |
ios::unitbuf | Vide les tampons après écriture. |
ios::stdio | Vide les tampons de sortie standard out et de sortie derreur err après insertion. |
Le champ de format peut être lu par la méthode long flags(void)
et modifié par long flags(long)
. Deux autres méthodes peuvent être utilisées aussi dans ce but. La méthode long unsetf(long)
met à zéro les bits du champ de format qui valent 1 dans son argument. La méthode long setf(long)
a leffet contraire. Mais on utilisera surtout long setf(long, long)
; le premier argument indique la nouvelle valeur des bits à modifier ; le deuxième argument indique les bits à modifier effectivement (ceux à 1 ; ceux à 0 ne sont pas changés), et peut être pris dans la liste de constantes suivante :
ios::basefield | égal à | ios::dec | ios::oct | ios::hex |
ios::adjustfield | égal à | ios::left|ios::right|ios::internal |
ios::floatfield | égal à | ios::scientific | ios::fixed |
Par exemple
f.setf(ios::uppercase|ios::hex, ios::uppercase|ios::basefield);
change les bits de base décriture et de uppercase
afin décrire les entiers en hexadécimal avec des lettres majuscules pour les chiffres A
à F
.
Trois autres champs de formatage peuvent être utilisés. Le champ de largeur indique sur combien de caractères de large la donnée doit être écrite ; si la donnée est plus petite, la partie restante est remplie avec le caractère de remplissage ; si elle est trop grande elle nest pas tronquée. Ce champ est remis à zéro après chaque opération formatée. Il peut être lu par la méthode int width(void)
et modifié par int width(int)
(qui renvoie la valeur précédente).
Le champ de remplissage indique quel caractère est utilisé pour le remplissage lorsquil y en a un. Par défaut, cest lespace blanc qui est utilisé. Ce champ peut être lu par char fill(void)
et modifié par char fill(char)
.
Le champ de précision indique combien de décimales sont écrites au maximum dans les nombres à virgule flottante. Par défaut, le plus grand nombre de décimales significatives est écrit. Ce champ peut être lu par int precision(void)
et modifié par int precision(int)
.
Lensemble de ces champs de formats donne un nombre de possibilités très impressionnant, et quil est exclu de passer entièrement en revue. Voici simplement quelques exemples :
int i = 245;double d = 75.8901;cout.precision(2);cout.setf(ios::scientific, ios::floatfield);cout << d; // écrit 7.59e+01cout.width(7);cout.fill('$');cout << i; // écrit $$$$245cout.width(9);cout.fill('#');cout.setf(ios::left|ios::hex, ios::adjustfield|ios::basefield);cout << i; // écrit f5#######cout.fill(' ');cout.width(6);cout.setf(ios::internal|ios::showpos|ios::dec, ios::adjustfield|ios::showpos|ios::basefield);cout << i; // écrit + 245
Cette notation nest pas très pratique, une meilleure sera indiquée plus loin (paragraphe sur les manipulateurs).
Précédent | Sommaire | Suivant |