Bonjour, je ne trouve plus comme on fait pour afficher un chiffre en un nombre de caracteres constant (1 devient 001, 2 devient 002...).
J'ai essayé %3d mais ça met des espaces au lieu des 0.
Merci
Bonjour, je ne trouve plus comme on fait pour afficher un chiffre en un nombre de caracteres constant (1 devient 001, 2 devient 002...).
J'ai essayé %3d mais ça met des espaces au lieu des 0.
Merci
Au fait y a pas mieux que sprintf pour jouer avec les chaines en C++ ?
Pour compléter, .3 n'affichera pas mal un float, il l'affichera différemment. S'il veut avoir le même comportement (taille de 3, comblé avec des 0) avec une valeur décimale, .3 ne suffira pas. Utiliser par exempledonnera
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 const double dPI = 3,141592; sprintf(monBuffer, "%.3d", dPI);alors que003donnera
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 const double dPI = 3,141592; sprintf(monBuffer, "%.3f", dPI);Il y a les flux de la STL et sûrement d'autres.3.141
tu sait combien ça peut couté un bug comme celui là?
c'est plutôt indéfinie, non?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 const double dPI = 3.141592; sprintf(monBuffer, "%.3d", dPI);
Si les flux et leurs manipulateurs.Au fait y a pas mieux que sprintf pour jouer avec les chaines en C++ ?
http://cpp.developpez.com/faq/cpp/?page=SL
http://cpp.developpez.com/faq/cpp/?p...stream_iomanip
Pour manipuler une string, le mieux est std::ostringstream et std::istringstream.
Sinon boost.format pour garder la manipulation "à la printf"
Euh.. tu parles de la virgule à la place du point? Si c'est ça, mea culpa, j'ai tapé un peu vite. Sinon, je vois pas trop le problème...Après vérification, tu as raison. Re-mea culpa. C'est marrant, j'étais persuadé avoir déjà affiché la partie entière d'un double de cette façon.c'est plutôt indéfinie, non?
Je dois sûrement confondre.
En C++, un truc de ce genre devrait marcher:
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 #include <iostream> #include <iomanip> #include <string> #include <sstream> using namespace std; string FormatString(int valeur) { ostringstream oss; oss << dec << setfill('0') << setw(3) << valeur; return oss.str(); }
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Je crois, par contre, qu'il n'est optionnel que pour printf() : Utilisé avec scanf(), il fait vraiment la différence entre un float et un double.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Merci pour les réponses, %03d fonctionne très bien. Merci
1/ "%.3d" affiche un entier de d'au moins 3 chiffres dans un champs de taille minimale.
"%03d" affiche un entier dans un champs d'au moins 3 caracteres, le champs etant complete avec des zero.
Il y a une difference pour les nombres negatifs ou avec un flag + et <espace> (le signe compte dans la taille du champs, pas dans la precision).
2/ printf ne peut pas faire la difference entre float et double, c'est une fonction variadique et donc ses arguments subissent une promotion.
3/ screetch, a quoi est-ce que tu veux faire allusion?
principalement que les flux C++ sont tres mal faits et qu'ils ont de gros defauts, l'un d'entre eux etant le grand nombre d'appels de fonction et l'autre etant le fait que les chaines se retrouvent coupées et donc intraduisibles (manque de contexte)
l'inconvenient de printf c'est la verification des arguments; quelques compilos donnent des warning si le format et les arguments ne correspondent pas.
il n'y a pas encore de solution type-safe de faire un sprintf en C++, seulement une emulation du meme comportement.
Partager