|
|
|
#1 |
|
Messages: n/a
Hébergeur: |
Bonjour à tous,
une petite question me tarude : quand j'écris quelques chose du style cout << hex << setwidth( 2 ) << setfill( 0 ); est-ce que le formattage est définitivement changé et n'est-il valable que pour la prochaine insertion? Et y a t'il justement un moyen de changer de manière définitive ou au contraire temporaire le formatage d'un stream? Merci. |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
25/04/2008 14:49 - Guillaume GOURDIN :
> est-ce que le formattage est définitivement changé et n'est-il valable > que pour la prochaine insertion? Et y a t'il justement un moyen de > changer de manière définitive ou au contraire temporaire le formatage > d'un stream? Pour autant que je puisse dire, ce tableau est juste : http://cpp.developpez.com/faq/cpp/?p...stream_iomanip |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
Grasshoper wrote:
> 25/04/2008 14:49 - Guillaume GOURDIN : >> est-ce que le formattage est définitivement changé et n'est-il valable >> que pour la prochaine insertion? Et y a t'il justement un moyen de >> changer de manière définitive ou au contraire temporaire le formatage >> d'un stream? > > Pour autant que je puisse dire, ce tableau est juste : > http://cpp.developpez.com/faq/cpp/?p...stream_iomanip Merci! Y a t'il une raison particuliere pour que setw ne soit pas persistant? Je ne trouve pas ça très pratique, en effet, je voudrais un affichage du type : 0x00 0x01 0x02 0x03 0x04... ce qui implique que je vais devoir ajouter un 'setw(2)' avant chaque insertion... :-/ |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
Guillaume GOURDIN <trash@hotmail.com> writes:
> Grasshoper wrote: >> 25/04/2008 14:49 - Guillaume GOURDIN : >>> est-ce que le formattage est définitivement changé et n'est-il >>> valable que pour la prochaine insertion? Et y a t'il justement un >>> moyen de changer de manière définitive ou au contraire temporaire >>> le formatage d'un stream? >> Pour autant que je puisse dire, ce tableau est juste : >> http://cpp.developpez.com/faq/cpp/?p...stream_iomanip > > Merci! Y a t'il une raison particuliere pour que setw ne soit pas > persistant? Je ne trouve pas ça très pratique, en effet, je voudrais > un affichage du type : > > 0x00 0x01 0x02 0x03 0x04... > > ce qui implique que je vais devoir ajouter un 'setw(2)' avant chaque > insertion... :-/ Par défaut, le formatage se fait avec une largeur variable ajusté à chaque objet imprimé. Si setw() était persistent, il faudrait pouvoir spécifier cette largeur variable, soit en utilisant une valeur spéciale (pas trop ragoutant), soit en créant une méthode spéciale resetw() (je suppose que les programmeurs de la stl étaient trop faignant pour ça), soit en surchargeant la méthode: class default{public:default(){}}; .... setw(const default&){...} ... aussi assez laborieux à définir, même si ce serait assez facile à utiliser: cout<<setw(default()); Et il faut aussi voir comment on l'utiliserait le plus souvent. Prenons ton exemple: cout<<hex()<<setw(8)<<" 0x"<<val[0]<<" 0x"<<val[1]<<endl; donnerait: | | 0x FDECBA98 0x 76543210 | puisque setw(8) s'appliquerait aussi aux " 0x". Il faudrait alors écrire: cout<<hex()<<resetw()<<" 0x"<<setw(8)<<val[0]<<resetw()<<" 0x"<<setw(8)<<val[1]<<endl; ce qui serait plus fastidieux. -- __Pascal Bourguignon__ |
|
|
|
#5 |
|
Messages: n/a
Hébergeur: |
On Apr 25, 2:49 pm, Guillaume GOURDIN <tr...@hotmail.com> wrote:
> une petite question me tarude : quand j'écris quelques chose du style > cout << hex << setwidth( 2 ) << setfill( 0 ); > est-ce que le formattage est définitivement changé et n'est-il > valable que pour la prochaine insertion? S'il s'agit là de std::setfill ou std::hex, c'est permanent. S'il s'agit des manipulateurs personels, ça dépend de comment tu les as écrits -- typiquement, on fait en sort que les effets persistent jusqu'à la fin de l'expression complète. > Et y a t'il justement un moyen de changer de manière > définitive ou au contraire temporaire le formatage d'un > stream? Plus ou moins. Tous les attributes de formattage sauf la taille (width) persiste. Donc, si tu fais : std::cout.setf( std::ios::hex, std::ios::basefield ) ; , ça persiste. En revanche, normalement, on écrit ces propres manipulateur de façon à ce que le destructeur résitue l'état antérieur ; on écrirait donc : std::cout << HexFmt( 2 ) << valeur ; et le manipulateur laisse std::cout comme il l'a trouvé (mais on peut écrire: HexFmt hex( 2 ) ; std::cout << hex << v1 << std::endl ; std::cout << hex << v2 << std::endl ; etc. ; le format serait rétabli quand hex est détruit). -- James Kanze (GABI Software) email:james.kanze@gmail.com Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34 |
|
![]() |
| Outils de la discussion | |
|
|