Justifier la production en C++ à droite

Jinku Hu 12 octobre 2023
  1. Utilisez std::right et std::setw pour justifier à droite le flux de sortie en C++
  2. Utilisez la fonction printf pour justifier à droite la sortie en C++
Justifier la production en C++ à droite

Cet article présente plusieurs méthodes pour justifier le flux de sortie en C++.

Utilisez std::right et std::setw pour justifier à droite le flux de sortie en C++

La bibliothèque standard C++ fournit des fonctions d’aide au manipulateur d’E/S pour mieux contrôler les flux lorsqu’elles sont utilisées avec les opérateurs << >>, et elles sont incluses dans le fichier d’en-tête <iomanip>. std::right est l’un des manipulateurs de flux qui définit la position des caractères de remplissage. Il doit donc être utilisé en conjonction avec la fonction de manipulation std::setw, qui est utilisée pour définir la largeur du flux. std::setw prend un entier unique comme argument pour spécifier le nombre de caractères à allouer à la largeur du flux.

Dans l’exemple de code suivant, nous initialisons un vecteur de double avec des valeurs arbitraires qui ont une précision différente, puis nous les affichons toutes comme justifiées sur le côté droit de la console.

#include <iomanip>
#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::fixed;
using std::right;
using std::setw;
using std::vector;

int main() {
  vector<double> d_vec = {123.231,       2.2343, 0.324,     0.012,
                          26.9491092019, 11013,  92.001112, 0.000000234};

  for (auto &i : d_vec) {
    cout << right << setw(20) << fixed << i << endl;
  }
  cout << endl;

  return EXIT_SUCCESS;
}

Production :

  123.231000
    2.234300
    0.324000
    0.012000
   26.949109
11013.000000
   92.001112
    0.000000

Utilisez la fonction printf pour justifier à droite la sortie en C++

Une autre fonction puissante pour traiter le formatage des entrées/sorties est printf. Même si printf n’est pas utilisé avec les flux cin/cout, il peut formater des arguments variables séparément. Notez que nous utilisons le spécificateur de format %f pour les valeurs en virgule flottante, et utilisons un nombre arbitraire 20 pour ajouter des caractères de remplissage à chaque élément. En conséquence, chaque ligne a une largeur de 20 caractères, et comme le nombre est positif, les caractères de remplissage sont ajoutés à partir de la gauche.

#include <iomanip>
#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::fixed;
using std::right;
using std::setw;
using std::vector;

int main() {
  vector<double> d_vec = {123.231,       2.2343, 0.324,     0.012,
                          26.9491092019, 11013,  92.001112, 0.000000234};

  for (auto &i : d_vec) {
    printf("%20f\n", i);
  }

  return EXIT_SUCCESS;
}

Production :

  123.231000
    2.234300
    0.324000
    0.012000
   26.949109
11013.000000
   92.001112
    0.000000

On peut aussi insérer un nombre entier négatif dans le spécificateur de format pour remplir les caractères à droite, justifiant la sortie à gauche. Une autre fonction puissante de printf est de formater les valeurs de chaînes littérales, comme le montre l’exemple de code suivant. Notez que %c est le spécificateur de format char, et que la valeur 0x20 est hexadécimale pour un caractère espace.

#include <iomanip>
#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::fixed;
using std::right;
using std::setw;
using std::vector;

int main() {
  vector<double> d_vec = {123.231,       2.2343, 0.324,     0.012,
                          26.9491092019, 11013,  92.001112, 0.000000234};

  for (auto &i : d_vec) {
    printf("%-20f\n", i);
  }

  printf("%60s\n", "this ought to be justified right");
  printf("%-20s|%20c|%20s\n", "wandering", 0x20, "the tower");

  return EXIT_SUCCESS;
}

Production :

123.231000          
2.234300            
0.324000            
0.012000            
26.949109           
11013.000000      
92.001112           
0.000000            
                            this ought to be justified right

wandering           |                    |           the tower
Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Article connexe - C++ IO