Utiliser le manipulateur setw en C++

Jinku Hu 12 octobre 2023
Utiliser le manipulateur setw en C++

Cet article montre comment utiliser le manipulateur de flux setw en C++.

Utilisez la fonction std::setw pour modifier la largeur de la prochaine opération d’E/S en C++

Les manipulateurs de flux sont des objets spéciaux qui modifient le formatage d’entrée/sortie et génèrent parfois une action. La fonction std::endl, sans doute l’objet le plus couramment utilisé dans les flux de sortie, est en effet un manipulateur de flux. Il imprime un caractère de nouvelle ligne et vide le tampon de sortie.

Par contre, la commande std::setw ne génère aucune sortie. Au lieu de cela, il définit la largeur de la prochaine E/S sur l’argument intégral passé. Certains manipulateurs de flux utilisent des arguments ; ceux-ci doivent inclure un en-tête <iomanip>. L’exemple suivant illustre le scénario de formatage de sortie de base pour le manipulateur setw. Le manipulateur setfill est le compagnon naturel de setw. Le premier est utile pour modifier le caractère de remplissage avec l’argument char donné.

#include <iomanip>
#include <iostream>
#include <sstream>

using std::cout;
using std::endl;
using std::setw;
using std::string;

int main() {
  cout << "setw() : |" << 11 << "|" << endl
       << "setw(4): |" << setw(4) << 11 << "|" << endl
       << "setw(4): |" << 22 << setw(4) << std::setfill('-') << 22 << 33 << "|"
       << endl;

  return EXIT_SUCCESS;
}

Production:

setw() : | 11 | setw(4) : | 11 | setw(4) : | 22 --2233 |

Alternativement, nous pouvons utiliser le manipulateur setw pour restreindre le nombre de caractères extraits de l’objet stringstream. Cette méthode peut être utile pour les tampons char qui sont déclarés comme des tableaux fixes. Généralement, les manipulateurs sont implémentés en utilisant la surcharge de fonction.

Chaque manipulateur est la fonction qui renvoie une référence au flux. Les pointeurs vers l’une de ces fonctions sont passés aux opérateurs d’extraction/insertion de flux, qui sont eux-mêmes des opérateurs surchargés. Les fonctions d’argument sont invoquées à partir des corps des opérateurs surchargés.

#include <iomanip>
#include <iostream>
#include <sstream>

using std::cout;
using std::endl;
using std::setw;
using std::string;

int main() {
  std::stringstream ss1("hello there");
  char arr[10];

  ss1 >> setw(6) >> arr;
  cout << arr;

  return EXIT_SUCCESS;
}

Production:

hello

Une fonctionnalité utile du manipulateur setw est de définir facilement la limite de l’entrée utilisateur qui doit être stockée dans un tampon de taille fixe. Il suffit de passer sizeof(buffer) comme argument à setw. Notez que l’appel setw affecte une seule opération d’E/S, puis la largeur par défaut est restaurée automatiquement. A l’inverse, la modification setfill reste active jusqu’au changement explicite.

#include <iomanip>
#include <iostream>

using std::cin;
using std::cout;
using std::endl;
using std::setw;

int main() {
  char buffer[24];
  cout << "username: ";
  cin >> setw(sizeof(buffer)) >> buffer;

  return EXIT_SUCCESS;
}

Production:

username:
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