FAQ C++Consultez toutes les FAQ

Nombre d'auteurs : 35, nombre de questions : 368, dernière mise à jour : 17 novembre 2018  Ajouter une question

 

Cette FAQ a été réalisée à partir des questions fréquemment posées sur les forums de http://www.developpez.com et de l'expérience personnelle des auteurs.

Je tiens à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose sont correctes ; les auteurs font le maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous trouvez une erreur ou si vous souhaitez devenir rédacteur, lisez ceci.

Sur ce, nous vous souhaitons une bonne lecture.


SommaireEntrées / sorties avec les fluxReprésentation - Formatage (4)
précédent sommaire suivant
 

Il est possible, comme cela se faisait avec printf(), de formater les informations envoyées sur un flux en utilisant ce que l'on appelle les manipulateurs de flux. Voici un petit topo (non exhaustif) des manipulateurs les plus utilisés :




   Manipulateur    Persistant Effet
Manipulateurs généraux
flush non Force le vidage du buffer du flux et son affichage
endl non Envoie une fin de ligne ('\n') ainsi qu'un flush
setw(n) non Spécifie que la prochaine sortie s'effectuera sur n caractères
setfill(c) oui Indique le caractère de remplissage pour setw
left non Aligne la sortie à gauche lors de l'utilisation de setw
right non Aligne la sortie à droite lors de l'utilisation de setw (comportement par défaut)
Formatage des nombres entiers
dec oui Injecte / extrait les nombres sous forme décimale
oct oui Injecte / extrait les nombres sous forme octale
hex oui Injecte / extrait les nombres sous forme hexadécimale
uppercase oui Affiche les lettres de la représentation hexadécimale en majuscule
nouppercase oui Affiche les lettres de la représentation hexadécimale en minuscule (annule l'effet d'uppercase)
Formatage des nombres flottants
setprecision(n) oui Spécifie le nombre de chiffres après la virgule affichés pour les nombres flottants non entiers (6 par défaut)
fixed oui Affiche les nombres flottants en notation décimale (opposé de scientific)
scientific oui Affiche les nombres flottants en notation scientifique (opposé de fixed)
Formatage des booléens
boolalpha oui Affiche les booléens sous forme alphabétique (« true » et « false » au lieu de « 1 » et « 0 »)
noboolalpha oui Affiche les booléens sous forme de chiffre (annule l'effet de boolalpha)
Exemple

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iomanip> 
#include <iostream> 
  
using namespace std; 
  
// Un petit tableau 
  
// En-têtes de colonnes 
cout << setfill(' ') 
     << setw(15) << left << "Colonne 1" 
     << setw(10) << left << "Colonne 2" 
     << endl; 
  
// Ligne 1 
cout << setprecision(2) << fixed 
     << setw(15) << left << 158.82589 
     << setw(10) << left << 456.10288 
     << endl; 
  
// Ligne 2 
cout << hex << uppercase 
     << setw(15) << left << 255 
     << setw(10) << left << 128 
     << endl; 
  
// Ligne 3 
cout << boolalpha 
     << setw(15) << left << true 
     << setw(10) << left << false 
     << endl;
À noter qu'il existe dans boost une bibliothèque de formatage style printf, mais plus évoluée et tirant partie des avantages offerts par le C++ (voir boost::format).

Mis à jour le 17 octobre 2005 Laurent Gomila

Le principe est le même que celui de la question Comment convertir un nombre en une string ?, sauf que l'on précise que l'on désire une représentation hexadécimale au moyen de std::hex.

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
#include <string>  
#include <sstream>  
  
int x = 127;  
std::ostringstream oss;  
oss << std::hex << x;  
  
std::string Hex = oss.str();
On peut de la même manière obtenir une représentation décimale (std::dec), ou octale (std::oct).

Mis à jour le 18 avril 2005 Laurent Gomila

Le principe est le même que celui de la question Comment convertir une string en un entier ?, sauf que l'on précise que l'on manipule une représentation hexadécimale au moyen de std::hex.

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
#include <string>  
#include <sstream>  
  
std::string Hex = "7F";  
int x;  
  
std::istringstream iss( Hex );  
iss >> std::hex >> x;
On peut de la même manière convertir une représentation décimale (std::dec), ou octale (std::oct).

Mis à jour le 18 avril 2005 Laurent Gomila

Il existe dans la bibliothèque standard des manipulateurs de flux permettant de travailler dans l'une de ces trois bases :

  • décimale (std::dec)
  • hexadécimale (std::hex)
  • octale (std::oct)

Pour voir un exemple d'utilisation de ces manipulateurs, lisez Comment obtenir la représentation hexadécimale d'un entier ? et Comment obtenir un entier à partir de sa représentation hexadécimale ?.

Il n'existe aucun manipulateur pour la base 2 (binaire), mais on pourra y arriver au moyen de la classe std::bitset<>

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <bitset> 
#include <string> 
#include <sstream> 
  
int main() 
{ 
    // Conversion binaire -> décimal 
    std::bitset<8> b1( std::string( "01001011" ) ); 
    unsigned long x = b1.to_ulong(); // x = 75 
  
    // Conversion décimal -> binaire 
    std::bitset<8> b2( 75 ); 
  
    // Version 1 : un peu lourde à écrire 
    std::string s1 = b2.to_string< 
        char, 
        std::char_traits<char>, 
        std::allocator<char> >(); // s1 = "01001011" 
  
    // Version 2 : un peu plus sympa 
    std::ostringstream oss; 
    oss << b2; 
    std::string s2 = oss.str(); // s2 = "01001011" 
}

Mis à jour le 18 avril 2005 Laurent Gomila

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2019 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.