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