Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1518 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  cout versus printf

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

cout versus printf

n°569047
bb138
La vie est belle ...
Posté le 17-11-2003 à 15:48:54  profilanswer
 

Juste une petite question:
lorsque l'on a des tableaux de texte (un tableau par message et une ligne de chacun d'entre eux represente une langue) et que l'on souhaite afficher un message contenant un nombre dans une langue, on peut faire:

Code :
  1. printf(malignedetab, &valeur);


mais comment fait-on simplement avec cout ?

mood
Publicité
Posté le 17-11-2003 à 15:48:54  profilanswer
 

n°569078
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 17-11-2003 à 16:08:33  profilanswer
 

Code :
  1. std::string malignedetab="ligne";
  2. std::string valeur="5";
  3. cout << "ligne : " << malignedetab << " " << "valeur : " << valeur << endl;


Message édité par Harkonnen le 17-11-2003 à 16:09:42
n°569086
skeye
Posté le 17-11-2003 à 16:16:30  profilanswer
 

Harkonnen a écrit :

Code :
  1. std::string malignedetab="ligne";
  2. std::string valeur="5";
  3. cout << "ligne : " << malignedetab << " " << "valeur : " << valeur << endl;




Emmerdant si valeur doit être au milieu de la phrase...


---------------
Can't buy what I want because it's free -
n°569090
antp
Super Administrateur
Champion des excuses bidons
Posté le 17-11-2003 à 16:20:27  profilanswer
 

comme nraynaud l'a dit sur blabla@prog :
 

nraynaud a écrit :

moi j'ai compris, pour faire de l'internationalisation, il a chaque chaine de format stockée dans plusieurs langues, il sélectionne dynamiquement la chaine de format :  
 
const char[] fr = "le compte est de %d";
const char[] en = "the count is %d";
 
printf(message, count);
 
en se démerdant pour que message vale fr ou en avant d'appeller le printf.
 
Il veut faire le même système avec cout.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°569094
skeye
Posté le 17-11-2003 à 16:26:36  profilanswer
 

Perso je pense que je ferais comme ça:
1) je stockerais mes chaines dans toutes les langues avec un truc du style "xxxxx" pour reconnaitre l'emplacement de la valeur à insérer.
2) Je récupèrerais la chaine correspondant à la bonne langue dans une string temporaire.
3) Je ferais un replace de mon "xxxxx" par la valeur voulue dans ma string.
4) cout<<string_temporaire;


Message édité par skeye le 17-11-2003 à 16:27:30

---------------
Can't buy what I want because it's free -
n°569098
antp
Super Administrateur
Champion des excuses bidons
Posté le 17-11-2003 à 16:28:47  profilanswer
 

Et quand t'as deux valeurs ?  
Ils ont quand même prévu un équivalent de printf qui retourne un std::string, non ? ou bien ils n'ont pas le sens pratique les gens qui font du C++ ? (non je ne trolle pas, mais bon en Delphi & C++Builder y a la fonction Format qui est bien pratique :whistle:)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°569104
HelloWorld
Salut tout le monde!
Posté le 17-11-2003 à 16:30:16  profilanswer
 

Autant utiliser sprintf...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°569105
Moktar1er
No one replies...
Posté le 17-11-2003 à 16:30:17  profilanswer
 

Code :
  1. ...
  2. char maChaine[256];
  3. ...
  4. sprintf( maChaine, format, valeur );
  5. cout<<maChaine<<endl;
  6. ...


 
quoi?
bon Ok je sors...
 
EDIT: non seulement réponse à 0.3? et en plus grilled...


Message édité par Moktar1er le 17-11-2003 à 16:32:10
n°569109
antp
Super Administrateur
Champion des excuses bidons
Posté le 17-11-2003 à 16:31:08  profilanswer
 

HelloWorld a écrit :

Autant utiliser sprintf...


 
faut une variable temporaire :(


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°569113
bb138
La vie est belle ...
Posté le 17-11-2003 à 16:33:14  profilanswer
 

Oups... oui, j'ai oublie de donner un exemple...
C'etait un peu comme antp l'a repris de nraynaud mais bien evidemment avec le %d en plein ;ilieu de la phrase ;):
 
const char[] fr = "le compte est de %d voitures";
const char[] en = "the count is %d cars";
...
 
skeye -> je pensais utiliser cette methode mais cela contraint d'utiliser un string temporaire alors que dans ce cas le printf est plus simple a utiliser.

mood
Publicité
Posté le 17-11-2003 à 16:33:14  profilanswer
 

n°569116
skeye
Posté le 17-11-2003 à 16:34:02  profilanswer
 

antp a écrit :

Et quand t'as deux valeurs ?  
Ils ont quand même prévu un équivalent de printf qui retourne un std::string, non ? ou bien ils n'ont pas le sens pratique les gens qui font du C++ ? (non je ne trolle pas, mais bon en Delphi & C++Builder y a la fonction Format qui est bien pratique :whistle:)


ah oui tiens ma soluce est très laide (mais moins que celle de Harko...[:cupra]).
 
Je crois pas avoir vu d'équivalent à Format pour les string, qui existe dans les MFC par contre... [:skeye]


---------------
Can't buy what I want because it's free -
n°569118
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 17-11-2003 à 16:35:35  profilanswer
 

un volontaire pour envoyer un MP à Taz ? :D

n°569121
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 17-11-2003 à 16:36:20  profilanswer
 

skeye a écrit :


ah oui tiens ma soluce est très laide (mais moins que celle de Harko...[:cupra]).


oui mais moi j'ai pas compris dés le début ce qu'il voulait [:antp]

n°569127
nraynaud
lol
Posté le 17-11-2003 à 16:40:35  profilanswer
 

personne qui sait ? c'est grave quand même.
 
ça marche comment en java ? ça doit être une solution du même style.


---------------
trainoo.com, c'est fini
n°569129
nraynaud
lol
Posté le 17-11-2003 à 16:42:46  profilanswer
 

Harkonnen a écrit :


moi j'ai pas compris dés le début ce qu'il voulait

c'est sur que les trucs propres et dans la bonne langue ; en assembleur c'est un peu une hérésie.


Message édité par nraynaud le 17-11-2003 à 16:43:35

---------------
trainoo.com, c'est fini
n°569131
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 17-11-2003 à 16:43:21  profilanswer
 

nraynaud a écrit :

personne qui sait ? c'est grave quand même.


clair... le genre de question à la con qui plante tout le monde :/
qui se dévoue pour envoyer un MP à Taz ?

n°569132
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 17-11-2003 à 16:43:47  profilanswer
 

nraynaud a écrit :

c'est sur que les trucs propres et dans la bonne langue ; en assembleur c'est un peu une hérésie.

[:sinclaire]

n°569138
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 17-11-2003 à 16:51:45  profilanswer
 

BB138 >> regarde ici si tu peux trouver un truc qui t'aide... :/
 
http://groups.google.com/groups?q= [...] art=0&sa=N

n°569158
bb138
La vie est belle ...
Posté le 17-11-2003 à 17:08:45  profilanswer
 

A priori dans ce que j'ai pu lire sur le lien indique, il n'y a pas grand chose pour remplacer le printf dans quelques situations...

n°569168
Taz
bisounours-codeur
Posté le 17-11-2003 à 17:15:23  profilanswer
 

oui ?

n°569169
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 17-11-2003 à 17:16:44  profilanswer
 

\o/
t'as une idée pour ce topic tellement idiot que personne n'est capable de le résoudre ? :D

n°569173
bb138
La vie est belle ...
Posté le 17-11-2003 à 17:18:01  profilanswer
 

Disons le remplacer par quelque chose d'aussi simple.
 
Je garderai donc mon printf...


Message édité par bb138 le 17-11-2003 à 17:18:44
n°569175
Taz
bisounours-codeur
Posté le 17-11-2003 à 17:18:40  profilanswer
 

je capte pas trop, vous voulez quoi en fait ? un printf-like vraiment C++ ?

n°569177
bb138
La vie est belle ...
Posté le 17-11-2003 à 17:19:35  profilanswer
 

Et bien oui, mais en utilisant directement cout !

n°569182
Taz
bisounours-codeur
Posté le 17-11-2003 à 17:22:58  profilanswer
 

1) utilise des trucs genre gettext pour les traduction
2) j'ai toujours pas compris ton truc. j'ai 2 solutions en tête mais je sais pas si ça va : boost::format ou alors tout simplement des modificateurs de flux

n°569188
antp
Super Administrateur
Champion des excuses bidons
Posté le 17-11-2003 à 17:28:20  profilanswer
 

boost::format ça a l'air d'être ce qu'il cherche :
http://www.boost.org/libs/format/index.htm


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°569190
bb138
La vie est belle ...
Posté le 17-11-2003 à 17:30:02  profilanswer
 

boost::format  ?? oups... je ne connais pas...
sinon ok pour les modificateurs de flux (si tu as quelques precisions la decu)
 
Pour gettext, j'approfondirai des que j'aurai le temps.

n°569191
bb138
La vie est belle ...
Posté le 17-11-2003 à 17:30:24  profilanswer
 

oups un cran de retard...

n°569195
Taz
bisounours-codeur
Posté le 17-11-2003 à 17:32:36  profilanswer
 

ben pour les modificateurs, je parle de truc genre endl, ends, hex, boolapha, y a moyen de fabriquer ses propres trucs. et y a encore plein d'autres trucs faisables, genre
 
cout << Log() << "des messages";
 
qui te permettrait un affichage du genre
 
"10h15 des messages fin de log"

n°569198
bb138
La vie est belle ...
Posté le 17-11-2003 à 17:34:38  profilanswer
 

Merci, je crois que boost::format va vraiment faire mon bonheur !!!
Biensur ce n'est pas aussi simple qu'un bon printf mais au premier abord, j'aime bien.


Message édité par bb138 le 17-11-2003 à 17:36:30
n°569199
Taz
bisounours-codeur
Posté le 17-11-2003 à 17:36:07  profilanswer
 

maintenant qui est capable de dire pourquoi boost::format (ou tout autre bordel C++) est bien meilleur que n'importe quel printf ?

n°569203
HelloWorld
Salut tout le monde!
Posté le 17-11-2003 à 17:39:23  profilanswer
 

Citation :

faut une variable temporaire :(


 
Ok ok. On essai de faire un truc C en C++. Faut chercher comment faire l'équivalent selon une approche C++, et pas strictement la même chose.
 
en C:

Code :
  1. const char[] fr = "le compte est de %d";
  2. const char[] en = "the count is %d";
  3. const char * message;
  4. void init()
  5. {
  6. #ifdef FRENCH
  7.     message = fr;
  8. #else
  9.     message = en;
  10. #endif
  11. }
  12. int main()
  13. {
  14.     init();
  15.     int count = 100;
  16.     printf(message, count);
  17.     return 0;
  18. }


 
 
en C++

Code :
  1. string getMessage(int Val)
  2. {
  3.     static const char[] fr = "le compte est de ";
  4.     static const char[] en = "the count is ";
  5.     ostringstream msg;
  6. #ifdef FRENCH
  7.     msg << fr << Val << ".";
  8. #else
  9.     msg << en << Val << ".";
  10. #endif
  11.     return msg.str();
  12. }
  13. int main()
  14. {
  15.     int count = 100;
  16.     cout << getMessage(count);
  17.     return 0;
  18. }


 
Un truc du genre.
Le static marque juste l'idée que chaque fonction se charge des chaînes. Par ex, en Win32, cela revient à récupérer la string depuis une ressource à partir d'un identifiant donné.
C'est lourd à écrire, mais ça me parraît tout de même meilleur. Tu peux au passage gérer la conversion (manétaire, métrique, ...), et c'est plus facile à utiliser que d'aller trouver la bonne chaine qui faut pour le printf et de pas se gourrer dans les arguments attendus. Ca m'amène à une remarque sur pourquoi je préfère cout à printf : si demain, tu veux afficher un float à la place de ton int, faut reprendre XXX lignes de code. Pas avec le cout. Même avec un printf, ça démontre l'utilité d'une fonction spécialisée (ou il suffirait de modifier une seule ligne de printf + le paramètre attendu, ou alors surcharge).


Message édité par HelloWorld le 17-11-2003 à 17:40:03

---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°569204
nraynaud
lol
Posté le 17-11-2003 à 17:39:46  profilanswer
 

Taz a écrit :

maintenant qui est capable de dire pourquoi boost::format (ou tout autre bordel C++) est bien meilleur que n'importe quel printf ?

ça compile plus lentement ?
le système de types statiques tout transpercé donne l'illusion aux naïfs que c'est sécure ?
ça permet de rajouter du bordel dans les includes ?


---------------
trainoo.com, c'est fini
n°569206
Taz
bisounours-codeur
Posté le 17-11-2003 à 17:42:09  profilanswer
 

nraynaud a écrit :

ça compile plus lentement ?
le système de types statiques tout transpercé donne l'illusion aux naïfs que c'est sécure ?
ça permet de rajouter du bordel dans les includes ?

très drôle. si je prends l'engagement de plus allez faire des remarques sur Java, tu retournes à ton caml ?
surtout vu la tronche de ton code ...
sinon, je fais des traductions et conseille l'emploi de gettext. ta méthode est à proscrire. surtout que tu ne connais meme pas les bases de C++ (ou C) pour localiser un minimum

n°569208
nraynaud
lol
Posté le 17-11-2003 à 17:42:59  profilanswer
 

HelloWorld a écrit :

float à la place de ton int, faut reprendre XXX lignes de code.

On a inventé la liaison retardée longtemps avant le bordel de la surcharge tu sais ?


---------------
trainoo.com, c'est fini
n°569214
HelloWorld
Salut tout le monde!
Posté le 17-11-2003 à 17:46:30  profilanswer
 

Citation :

On a inventé la liaison retardée longtemps avant le bordel de la surcharge tu sais ?


 
T'es assez spécialiste des langages (surtout des + farfelus :p *), mais pas moi. La liaison retardée, je sais vaguement ce que c'est... en VB. Ca ressemble à quoi en C?
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
(*) Humour hein! :)


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°569216
nraynaud
lol
Posté le 17-11-2003 à 17:47:52  profilanswer
 

Taz a écrit :

très drôle. si je prends l'engagement de plus allez faire des remarques sur Java, tu retournes à ton caml ?
surtout vu la tronche de ton code ...
sinon, je fais des traductions et conseille l'emploi de gettext. ta méthode est à proscrire. surtout que tu ne connais meme pas les bases de C++ (ou C) pour localiser un minimum


1) non c'est pas drole, ça ne fait plus rire. Non, je me barre pas de ce que tu sembles considérer comme ta catégorie. Et non, je ne t'interdit pas d'aller dans les catégories que tu veux.
2) mon code il t'emmerde, moi avec lui.
3) c'est pas ma méthode, c'est l'interpretation que j'avais faite du message initial. Et non, je ne connais pas les bases de la localisation, d'où ma présence ici.


---------------
trainoo.com, c'est fini
n°569217
Taz
bisounours-codeur
Posté le 17-11-2003 à 17:49:22  profilanswer
 

c'est ma cat :o

n°569218
nraynaud
lol
Posté le 17-11-2003 à 17:49:28  profilanswer
 

HelloWorld a écrit :

Citation :

On a inventé la liaison retardée longtemps avant le bordel de la surcharge tu sais ?


 
T'es assez spécialiste des langages (surtout des + farfelus :p *), mais pas moi. La liaison retardée, je sais vaguement ce que c'est... en VB. Ca ressemble à quoi en C?


En C tu n'as même pas envie de savoir, c'est pire que Beyrouth. En C++ c'est toutes les histoires de "virtual".


Message édité par nraynaud le 17-11-2003 à 17:54:10

---------------
trainoo.com, c'est fini
n°569222
R3g
fonctionnaire certifié ITIL
Posté le 17-11-2003 à 17:51:54  profilanswer
 

Taz a écrit :

c'est ma cat :o

spa si simple ! Tu l'avais laissée à l'abandon, il va falloir la reconquérir maintenant.
 
nraynaud > Tchetchenie [:aloy]


---------------
Au royaume des sourds, les borgnes sont sourds.
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  cout versus printf

 

Sujets relatifs
[Complexité] Cout d'un calcul MD5 | Cout de calcul d'une clé RSAcout -> outtext [résolu]
[java] printf2tits questions sur scanf et printf
[C] printf dans préprocesseur[C] Question con sur printf
Gabarit d un printfCout de développement d'un logiciel
Format printf shortprintf en remplaçant le car, plutôt quue décrire à la suite
Plus de sujets relatifs à : cout versus printf


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR