PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > fr.comp.lang.c++ > Formatage des streams
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
Formatage des streams

Réponse
 
LinkBack Outils de la discussion
Vieux 25/04/2008, 13h49   #1
Guillaume GOURDIN
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Formatage des streams

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.
  Réponse avec citation
Vieux 25/04/2008, 14h03   #2
Grasshoper
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Formatage des streams

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
  Réponse avec citation
Vieux 25/04/2008, 14h16   #3
Guillaume GOURDIN
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Formatage des streams

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... :-/
  Réponse avec citation
Vieux 25/04/2008, 15h41   #4
Pascal J. Bourguignon
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Formatage des streams

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__
  Réponse avec citation
Vieux 25/04/2008, 16h43   #5
James Kanze
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Formatage des streams

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
  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 01h50.


Édité par : vBulletin® version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières ©2000-2008
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,13293 seconds with 13 queries