Partager via


Utilisation des opérateurs d'insertion et contrôle du format

Cette rubrique explique comment le format de contrôle et comment créer les opérateurs d'insertion pour vos propres classes. L'opérateur insert (<<), qui est préprogrammé pour tous les types de données standard C++, envoie des octets à un objet de flux de sortie. Les opérateurs insert fonctionnent avec des « manipulateurs prédéfinis, » qui sont des éléments qui modifient le format par défaut des arguments entiers.

Vous pouvez contrôler le format des options suivantes :

  • Largeur de sortie

  • Alignement

  • Précision

  • Base

Largeur de sortie

Pour aligner la sortie, vous spécifiez la largeur de sortie pour chaque élément en plaçant le manipulateur d'setw dans le flux ou en appelant la fonction membre du width. Cet exemple droit aligne les valeurs d'une colonne au moins 10 caractères de large :

// output_width.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;

int main( )
{
   double values[] = { 1.23, 35.36, 653.7, 4358.24 };
   for( int i = 0; i < 4; i++ )
   {
      cout.width(10);
      cout << values[i] << '\n';
   }
}

Sortie

      1.23
     35.36
     653.7
   4358.24

Les espaces de début sont ajoutés à une valeur inférieure à 10 caractères de large.

Pour effectuer un champ, utilisez la fonction membre du fill, qui définit la valeur de caractère de remplissage des champs qui ont une largeur spécifiée. La valeur par défaut est un vide. Pour terminer la colonne de nombres avec les astérisques, modifiez la boucle précédente de pour comme suit :

for( int i = 0; i < 4; i++ )
{
   cout.width( 10 );
   cout.fill( '*' );
   cout << values[i] << endl;
}

Le manipulateur d'endl remplace le caractère de saut de ligne ('\n'). Voici un exemple de la syntaxe utilisée :

******1.23
*****35.36
*****653.7
***4358.24

Pour spécifier des largeurs des éléments de données dans la même ligne, utilisez le manipulateur d'setw :

// setw.cpp
// compile with: /EHsc
#include <iostream>
#include <iomanip>
using namespace std;

int main( )
{
   double values[] = { 1.23, 35.36, 653.7, 4358.24 };
   char *names[] = { "Zoot", "Jimmy", "Al", "Stan" };
   for( int i = 0; i < 4; i++ )
      cout << setw( 6 )  << names[i]
           << setw( 10 ) << values[i] << endl;
}

Sortie

La fonction membre du width est déclarée dans <l'iostream>. Si vous utilisez setw ou tout autre manipulateur avec les arguments, vous devez inclure <l'iomanip>. Dans le résultat, les chaînes sont imprimées dans un domaine de la largeur 6 et des entiers dans un domaine de la largeur 10 :

  Zoot      1.23
 Jimmy     35.36
    Al     653.7
  Stan   4358.24

Ni ni setwwidth ne tronque les valeurs. Si le résultat mis en forme dépasse la largeur, les sauvegardes de valeurs entières, en fonction de la valeur de la précision du flux de données. setw et width affectent le champ suivant uniquement. La largeur du champ est rétablie à son comportement par défaut (la largeur nécessaire) lorsqu'un champ a été écrit. Toutefois, les autres options de format de flux reste effective jusqu'à modifier.

Alignement

Les flux de sortie sont accordées par défaut au texte aligné à droite. À l'inscription à gauche des étiquettes dans l'exemple précédent et droit aligner les nombres, remplacer la boucle de pour comme suit :

for ( int i = 0; i < 4; i++ )
   cout << setiosflags( ios::left )
        << setw( 6 )  << names[i]
        << resetiosflags( ios::left )
        << setw( 10 ) << values[i] << endl;

Voici un exemple de la syntaxe utilisée :

Zoot        1.23
Jimmy      35.36
Al         653.7
Stan     4358.24

L'indicateur d'alignement à gauche est définie à l'aide de manipulateur d'setiosflags avec l'énumérateur d'gauche. Cet énumérateur est défini dans la classe d'entrées/sorties, et sa référence doit inclure le préfixe d'ios::. Le manipulateur d'resetiosflags désactive l'indicateur d'alignement à gauche. Contrairement à width et d'setw, le résultat d'setiosflags et d'resetiosflags est définitive.

Précision

La valeur par défaut de la précision à virgule flottante a six. Par exemple, les sauvegardes le numéro 3466,9768 3466,98. Pour modifier la façon dont cette valeur affiche, utilise le manipulateur d'setprecision. Le manipulateur deux indicateurs : définit et scientifique. Si définit est défini, les sauvegardes de numéro 3466,976800. Si scientific est défini, il imprime comme 3.4669773+003.

Pour afficher les nombres à virgule flottante affichés dans Alignement avec un chiffre significatif, remplacez la boucle de pour comme suit :

for ( int i = 0; i < 4; i++ )
   cout << setiosflags( ios::left )
        << setw( 6 )  
        << names[i]
        << resetiosflags( ios::left )
        << setw( 10 ) 
        << setprecision( 1 )
        << values[i] 
        << endl;

Le programme envoie cette liste :

Zoot          1
Jimmy     4e+001
Al        7e+002
Stan      4e+003

Pour éliminer la notation scientifique, insérez l'instruction avant que la boucle d'pour :

cout << setiosflags( ios::fixed );

Avec la notation fixe, les sauvegardes de programme avec un chiffre après la virgule.

Zoot         1.2
Jimmy       35.4
Al         653.7
Stan      4358.2

Si vous remplacez l'indicateur d'ios::fixed à ios::scientific, le programme envoie ce qui suit :

Zoot    1.2e+000
Jimmy   3.5e+001
Al      6.5e+002
Stan    4.4e+003

Là encore, l'outil affiche un chiffre après la virgule. Si ios::fixed ou ios::scientific est défini, la valeur de précision détermine le nombre de chiffres après la virgule. Si ni l'une ni l'autre d'indicateur n'est définie, la valeur de précision détermine le nombre de chiffres significatifs. Le manipulateur d'resetiosflags désactive ces indicateurs.

Base

dec, oct, et les manipulateurs de hex définissent la radix par défaut pour l'entrée et la sortie. Par exemple, si vous insérez le manipulateur de hex dans la sortie, l'objet traduit correctement la représentation des données interne des entiers dans un format de sortie hexadécimal. Les nombres sont affichés avec les données a à f en lettres minuscules si l'indicateur d'majuscules claire est (valeur par défaut) ; sinon, ils s'affichent en majuscules. La radix par défaut est dec (décimal).

Voir aussi

Référence

Flux de sortie