Lorsque je tente d'afficher un int, cet int est en hexadécimal, or il faut qu'il soit en decimal.
Merci de votre aide.
Donne un extrait de code, on en reparle ensuite...
Leo
On 19 fév, 21:37, (Marc Espie) wrote:
In article ,
Leo wrote:
Bobjour,
Lorsque je tente d'afficher un int, cet int est en hexadécimal, or il faut qu'il soit en decimal.
Merci de votre aide.
Donne un extrait de code, on en reparle ensuite...
Voila :
boost::mt19937 rng( time(NULL) ); // loi uniforme entre 10000 et 99999 boost::uniform_int<> dist(10001, 99998 ); // objet fonctionnel associant le generateur et la loi boost::variate_generator<boost::mt19937&, boost::uniform_int<> > die(rng, dist);
int al = die() % 99999;
// créer un flux de sortie std::ostringstream oss; // écrire un nombre dans le flux oss << al; // récupérer une chaîne de caractères std::string result = oss.str();
return result;
//et la il me sort un nombre hexadecimal
On 19 fév, 21:37, e...@lain.home (Marc Espie) wrote:
In article <1171913777.057792.8...@v45g2000cwv.googlegroups.com>,
Leo <Leo.L...@gmail.com> wrote:
Bobjour,
Lorsque je tente d'afficher un int, cet int est en hexadécimal, or il
faut qu'il soit en decimal.
Merci de votre aide.
Donne un extrait de code, on en reparle ensuite...
Voila :
boost::mt19937 rng( time(NULL) );
// loi uniforme entre 10000 et 99999
boost::uniform_int<> dist(10001, 99998 );
// objet fonctionnel associant le generateur et la loi
boost::variate_generator<boost::mt19937&, boost::uniform_int<> >
die(rng, dist);
int al = die() % 99999;
// créer un flux de sortie
std::ostringstream oss;
// écrire un nombre dans le flux
oss << al;
// récupérer une chaîne de caractères
std::string result = oss.str();
Lorsque je tente d'afficher un int, cet int est en hexadécimal, or il faut qu'il soit en decimal.
Merci de votre aide.
Donne un extrait de code, on en reparle ensuite...
Voila :
boost::mt19937 rng( time(NULL) ); // loi uniforme entre 10000 et 99999 boost::uniform_int<> dist(10001, 99998 ); // objet fonctionnel associant le generateur et la loi boost::variate_generator<boost::mt19937&, boost::uniform_int<> > die(rng, dist);
int al = die() % 99999;
// créer un flux de sortie std::ostringstream oss; // écrire un nombre dans le flux oss << al; // récupérer une chaîne de caractères std::string result = oss.str();
return result;
//et la il me sort un nombre hexadecimal
Michel Decima
On 19 fév, 21:37, (Marc Espie) wrote:
In article ,
Leo wrote:
Bobjour, Lorsque je tente d'afficher un int, cet int est en hexadécimal, or il faut qu'il soit en decimal. Merci de votre aide. Donne un extrait de code, on en reparle ensuite...
Voila :
boost::mt19937 rng( time(NULL) ); // loi uniforme entre 10000 et 99999 boost::uniform_int<> dist(10001, 99998 );
Je dirais plutot entre 10001 et 99998, mais c'est une question de gout.
// objet fonctionnel associant le generateur et la loi boost::variate_generator<boost::mt19937&, boost::uniform_int<> > die(rng, dist);
int al = die() % 99999;
Le modulo est inutile.
// créer un flux de sortie std::ostringstream oss; // écrire un nombre dans le flux oss << al; // récupérer une chaîne de caractères std::string result = oss.str(); return result;
//et la il me sort un nombre hexadecimal
Tu veux dire que la chaine de caractere contient un nombre hexa ? Comment fais tu l'affichage de cette chaine ?
J'ai rajouté les includes necessaires, remplacé le return par un std::cout, et j'obtiens des nombres en decimal, comme on s'y attendait. Tu es sur qu'il n'y a pas autre chose ?
On 19 fév, 21:37, e...@lain.home (Marc Espie) wrote:
In article <1171913777.057792.8...@v45g2000cwv.googlegroups.com>,
Leo <Leo.L...@gmail.com> wrote:
Bobjour,
Lorsque je tente d'afficher un int, cet int est en hexadécimal, or il
faut qu'il soit en decimal.
Merci de votre aide.
Donne un extrait de code, on en reparle ensuite...
Voila :
boost::mt19937 rng( time(NULL) );
// loi uniforme entre 10000 et 99999
boost::uniform_int<> dist(10001, 99998 );
Je dirais plutot entre 10001 et 99998, mais c'est une question de gout.
// objet fonctionnel associant le generateur et la loi
boost::variate_generator<boost::mt19937&, boost::uniform_int<> >
die(rng, dist);
int al = die() % 99999;
Le modulo est inutile.
// créer un flux de sortie
std::ostringstream oss;
// écrire un nombre dans le flux
oss << al;
// récupérer une chaîne de caractères
std::string result = oss.str();
return result;
//et la il me sort un nombre hexadecimal
Tu veux dire que la chaine de caractere contient un nombre hexa ?
Comment fais tu l'affichage de cette chaine ?
J'ai rajouté les includes necessaires, remplacé le return par un
std::cout, et j'obtiens des nombres en decimal, comme on s'y attendait.
Tu es sur qu'il n'y a pas autre chose ?
Bobjour, Lorsque je tente d'afficher un int, cet int est en hexadécimal, or il faut qu'il soit en decimal. Merci de votre aide. Donne un extrait de code, on en reparle ensuite...
Voila :
boost::mt19937 rng( time(NULL) ); // loi uniforme entre 10000 et 99999 boost::uniform_int<> dist(10001, 99998 );
Je dirais plutot entre 10001 et 99998, mais c'est une question de gout.
// objet fonctionnel associant le generateur et la loi boost::variate_generator<boost::mt19937&, boost::uniform_int<> > die(rng, dist);
int al = die() % 99999;
Le modulo est inutile.
// créer un flux de sortie std::ostringstream oss; // écrire un nombre dans le flux oss << al; // récupérer une chaîne de caractères std::string result = oss.str(); return result;
//et la il me sort un nombre hexadecimal
Tu veux dire que la chaine de caractere contient un nombre hexa ? Comment fais tu l'affichage de cette chaine ?
J'ai rajouté les includes necessaires, remplacé le return par un std::cout, et j'obtiens des nombres en decimal, comme on s'y attendait. Tu es sur qu'il n'y a pas autre chose ?
Leo
On 20 fév, 08:58, Michel Decima wrote:
On 19 fév, 21:37, (Marc Espie) wrote:
In article ,
Leo wrote:
Bobjour, Lorsque je tente d'afficher un int, cet int est en hexadécimal, or il faut qu'il soit en decimal. Merci de votre aide. Donne un extrait de code, on en reparle ensuite...
Voila :
boost::mt19937 rng( time(NULL) ); // loi uniforme entre 10000 et 99999 boost::uniform_int<> dist(10001, 99998 );
Je dirais plutot entre 10001 et 99998, mais c'est une question de gout.
J'ai oublie de changer le commentaire.
// objet fonctionnel associant le generateur et la loi boost::variate_generator<boost::mt19937&, boost::uniform_int<> > die(rng, dist);
int al = die() % 99999;
Le modulo est inutile.
Je sais mais c'etait pour etre sur que le probleme ne vient pas de la.
// créer un flux de sortie std::ostringstream oss; // écrire un nombre dans le flux oss << al; // récupérer une chaîne de caractères std::string result = oss.str(); return result;
//et la il me sort un nombre hexadecimal
Tu veux dire que la chaine de caractere contient un nombre hexa ? Comment fais tu l'affichage de cette chaine ?
J'ai rajouté les includes necessaires, remplacé le return par un std::cout, et j'obtiens des nombres en decimal, comme on s'y attendait. Tu es sur qu'il n'y a pas autre chose ?
La fonction s'appelle Generer, j'ai fait ca : std::cout<<Generer();
et ca me sort un truc genre 00411DF
Mais le truc bizard c'est que quand j'utilise le nombre retourne, cela marche tres bien.(de plus pendant l'execution, avec le debogeur, cela gennere un nombre decimal)
Donc tout va bien. :o)
On 20 fév, 08:58, Michel Decima <michel.dec...@orange-ft.com> wrote:
On 19 fév, 21:37, e...@lain.home (Marc Espie) wrote:
In article <1171913777.057792.8...@v45g2000cwv.googlegroups.com>,
Leo <Leo.L...@gmail.com> wrote:
Bobjour,
Lorsque je tente d'afficher un int, cet int est en hexadécimal, or il
faut qu'il soit en decimal.
Merci de votre aide.
Donne un extrait de code, on en reparle ensuite...
Voila :
boost::mt19937 rng( time(NULL) );
// loi uniforme entre 10000 et 99999
boost::uniform_int<> dist(10001, 99998 );
Je dirais plutot entre 10001 et 99998, mais c'est une question de gout.
J'ai oublie de changer le commentaire.
// objet fonctionnel associant le generateur et la loi
boost::variate_generator<boost::mt19937&, boost::uniform_int<> >
die(rng, dist);
int al = die() % 99999;
Le modulo est inutile.
Je sais mais c'etait pour etre sur que le probleme ne vient pas de
la.
// créer un flux de sortie
std::ostringstream oss;
// écrire un nombre dans le flux
oss << al;
// récupérer une chaîne de caractères
std::string result = oss.str();
return result;
//et la il me sort un nombre hexadecimal
Tu veux dire que la chaine de caractere contient un nombre hexa ?
Comment fais tu l'affichage de cette chaine ?
J'ai rajouté les includes necessaires, remplacé le return par un
std::cout, et j'obtiens des nombres en decimal, comme on s'y attendait.
Tu es sur qu'il n'y a pas autre chose ?
La fonction s'appelle Generer, j'ai fait ca :
std::cout<<Generer();
et ca me sort un truc genre 00411DF
Mais le truc bizard c'est que quand j'utilise le nombre retourne, cela
marche tres bien.(de plus pendant l'execution, avec le debogeur, cela
gennere un nombre decimal)
Bobjour, Lorsque je tente d'afficher un int, cet int est en hexadécimal, or il faut qu'il soit en decimal. Merci de votre aide. Donne un extrait de code, on en reparle ensuite...
Voila :
boost::mt19937 rng( time(NULL) ); // loi uniforme entre 10000 et 99999 boost::uniform_int<> dist(10001, 99998 );
Je dirais plutot entre 10001 et 99998, mais c'est une question de gout.
J'ai oublie de changer le commentaire.
// objet fonctionnel associant le generateur et la loi boost::variate_generator<boost::mt19937&, boost::uniform_int<> > die(rng, dist);
int al = die() % 99999;
Le modulo est inutile.
Je sais mais c'etait pour etre sur que le probleme ne vient pas de la.
// créer un flux de sortie std::ostringstream oss; // écrire un nombre dans le flux oss << al; // récupérer une chaîne de caractères std::string result = oss.str(); return result;
//et la il me sort un nombre hexadecimal
Tu veux dire que la chaine de caractere contient un nombre hexa ? Comment fais tu l'affichage de cette chaine ?
J'ai rajouté les includes necessaires, remplacé le return par un std::cout, et j'obtiens des nombres en decimal, comme on s'y attendait. Tu es sur qu'il n'y a pas autre chose ?
La fonction s'appelle Generer, j'ai fait ca : std::cout<<Generer();
et ca me sort un truc genre 00411DF
Mais le truc bizard c'est que quand j'utilise le nombre retourne, cela marche tres bien.(de plus pendant l'execution, avec le debogeur, cela gennere un nombre decimal)
Donc tout va bien. :o)
Michel Decima
On 20 fév, 08:58, Michel Decima wrote:
La fonction s'appelle Generer, j'ai fait ca : std::cout<<Generer();
et ca me sort un truc genre 00411DF
Quel est le prototype de la fonction Generer() ? Est-ce que tu peux poster un exemple restreint mais complet (includes + fonction + main) qui reproduit le probleme chez toi ?
On 20 fév, 08:58, Michel Decima <michel.dec...@orange-ft.com> wrote:
La fonction s'appelle Generer, j'ai fait ca :
std::cout<<Generer();
et ca me sort un truc genre 00411DF
Quel est le prototype de la fonction Generer() ? Est-ce que tu peux
poster un exemple restreint mais complet (includes + fonction + main)
qui reproduit le probleme chez toi ?
La fonction s'appelle Generer, j'ai fait ca : std::cout<<Generer();
et ca me sort un truc genre 00411DF
Quel est le prototype de la fonction Generer() ? Est-ce que tu peux poster un exemple restreint mais complet (includes + fonction + main) qui reproduit le probleme chez toi ?
Serge Paccalin
Le 20.02.2007 13:12, Leo a ecrit:
La fonction s'appelle Generer, j'ai fait ca : std::cout<<Generer();
et ca me sort un truc genre 00411DF
On dirait une adresse. Tu n'as pas oublié les parenthèses de l'appel à Generer ? Un truc comme ça :
std::cout << Generer;
ce qui te ferait afficher l'adresse de la fonction...
La fonction Generer ne retourne pas un pointeur ?
bizard
« Bizarre ».
-- Serge Paccalin
Le 20.02.2007 13:12, Leo a ecrit:
La fonction s'appelle Generer, j'ai fait ca :
std::cout<<Generer();
et ca me sort un truc genre 00411DF
On dirait une adresse. Tu n'as pas oublié les parenthèses de l'appel à
Generer ? Un truc comme ça :
std::cout << Generer;
ce qui te ferait afficher l'adresse de la fonction...
La fonction s'appelle Generer, j'ai fait ca : std::cout<<Generer();
et ca me sort un truc genre 00411DF
On dirait une adresse. Tu n'as pas oublié les parenthèses de l'appel à Generer ? Un truc comme ça :
std::cout << Generer;
ce qui te ferait afficher l'adresse de la fonction...
La fonction Generer ne retourne pas un pointeur ?
bizard
« Bizarre ».
-- Serge Paccalin
Oui, en effet, j'ai oublie les paranthese. :o)
James Kanze
Leo wrote:
On 20 fév, 08:58, Michel Decima wrote:
La fonction s'appelle Generer, j'ai fait ca : std::cout<<Generer();
et ca me sort un truc genre 00411DF
Mais le truc bizard c'est que quand j'utilise le nombre retourne, cela marche tres bien.(de plus pendant l'execution, avec le debogeur, cela gennere un nombre decimal)
Un nombre, ce n'est jamais décimal ni hexadécimal. Un nombre, c'est une valeur numérique, c'est tout ; il n'a pas de format. (Ou plutôt, il a un format interne qui n'est pas du texte, et qui est binaire -- complément à deux sur la plupart des machines.)
Le formattage en texte, c'est l'opérateur << qui l'effectue, en fonction des options de formattage présentes dans le flux. Et attention : à l'exception de la largeur, ces options persistent. Si jamais tu as démandé une sortie en format héxadécimal, tous les sorties (numériques) sur ce flux seront en héxadécimal jusqu'à nouvel ordre. En général donc, il est considéré bon ton de restaurer tout ce que tu changes, soit au moyen d'une classe RAII (genre IOSave chez moi), soit au moyen des manipulateurs qui restituent à la fin de l'expression complète (comme ceux qui dérivent de SSManip chez moi).
Sinon, on peut s'isoler de l'état du flux en formattant vers un ostringstream (qu'on vient de créer, et qui donc a toutes les options de formattage à l'état par défaut), et ensuite insérant la chaîne générée dans le flux ciblé.
-- James Kanze (GABI Software) email: 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
Leo wrote:
On 20 fév, 08:58, Michel Decima <michel.dec...@orange-ft.com> wrote:
La fonction s'appelle Generer, j'ai fait ca :
std::cout<<Generer();
et ca me sort un truc genre 00411DF
Mais le truc bizard c'est que quand j'utilise le nombre retourne, cela
marche tres bien.(de plus pendant l'execution, avec le debogeur, cela
gennere un nombre decimal)
Un nombre, ce n'est jamais décimal ni hexadécimal. Un nombre,
c'est une valeur numérique, c'est tout ; il n'a pas de format.
(Ou plutôt, il a un format interne qui n'est pas du texte, et
qui est binaire -- complément à deux sur la plupart des
machines.)
Le formattage en texte, c'est l'opérateur << qui l'effectue, en
fonction des options de formattage présentes dans le flux. Et
attention : à l'exception de la largeur, ces options
persistent. Si jamais tu as démandé une sortie en format
héxadécimal, tous les sorties (numériques) sur ce flux seront en
héxadécimal jusqu'à nouvel ordre. En général donc, il est
considéré bon ton de restaurer tout ce que tu changes, soit au
moyen d'une classe RAII (genre IOSave chez moi), soit au moyen
des manipulateurs qui restituent à la fin de l'expression
complète (comme ceux qui dérivent de SSManip chez moi).
Sinon, on peut s'isoler de l'état du flux en formattant vers un
ostringstream (qu'on vient de créer, et qui donc a toutes les
options de formattage à l'état par défaut), et ensuite insérant
la chaîne générée dans le flux ciblé.
--
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
La fonction s'appelle Generer, j'ai fait ca : std::cout<<Generer();
et ca me sort un truc genre 00411DF
Mais le truc bizard c'est que quand j'utilise le nombre retourne, cela marche tres bien.(de plus pendant l'execution, avec le debogeur, cela gennere un nombre decimal)
Un nombre, ce n'est jamais décimal ni hexadécimal. Un nombre, c'est une valeur numérique, c'est tout ; il n'a pas de format. (Ou plutôt, il a un format interne qui n'est pas du texte, et qui est binaire -- complément à deux sur la plupart des machines.)
Le formattage en texte, c'est l'opérateur << qui l'effectue, en fonction des options de formattage présentes dans le flux. Et attention : à l'exception de la largeur, ces options persistent. Si jamais tu as démandé une sortie en format héxadécimal, tous les sorties (numériques) sur ce flux seront en héxadécimal jusqu'à nouvel ordre. En général donc, il est considéré bon ton de restaurer tout ce que tu changes, soit au moyen d'une classe RAII (genre IOSave chez moi), soit au moyen des manipulateurs qui restituent à la fin de l'expression complète (comme ceux qui dérivent de SSManip chez moi).
Sinon, on peut s'isoler de l'état du flux en formattant vers un ostringstream (qu'on vient de créer, et qui donc a toutes les options de formattage à l'état par défaut), et ensuite insérant la chaîne générée dans le flux ciblé.
-- James Kanze (GABI Software) email: 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
James Kanze
Serge Paccalin wrote:
Le 20.02.2007 13:12, Leo a ecrit:
La fonction s'appelle Generer, j'ai fait ca : std::cout<<Generer();
et ca me sort un truc genre 00411DF
On dirait une adresse. Tu n'as pas oublié les parenthèses de l'appel à Generer ? Un truc comme ça :
std::cout << Generer;
ce qui te ferait afficher l'adresse de la fonction...
Ça ne doit pas le faire. Si Generer est une fonction, il n'y a pas de << (standard, en tout cas) qui peut sortir son adresse. On ne peut sortir que les adresses des données.
En fait, il y a bien une conversion implicite de « pointeur à fonction » en bool, et un opérateur << pour bool. Un compilateur est donc obligé à accepter la ligne en question ; puisque l'adresse de Generer n'est pas null, le resultat de la conversion est toujours vrai, et on doit afficher "1".
C'est ce que fait g++ et Sun CC. G++ émet un avertissement, aussi, signalant que le resultat de la conversion est toujours vrai -- c'est une bonne idée, parce que la plupart du temps, quand on convertit un nom d'une fonction en bool, c'est suite à une erreur de programmation.
-- James Kanze (GABI Software) email: 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
Serge Paccalin wrote:
Le 20.02.2007 13:12, Leo a ecrit:
La fonction s'appelle Generer, j'ai fait ca :
std::cout<<Generer();
et ca me sort un truc genre 00411DF
On dirait une adresse. Tu n'as pas oublié les parenthèses de l'appel à
Generer ? Un truc comme ça :
std::cout << Generer;
ce qui te ferait afficher l'adresse de la fonction...
Ça ne doit pas le faire. Si Generer est une fonction, il n'y a
pas de << (standard, en tout cas) qui peut sortir son adresse.
On ne peut sortir que les adresses des données.
En fait, il y a bien une conversion implicite de « pointeur à
fonction » en bool, et un opérateur << pour bool. Un
compilateur est donc obligé à accepter la ligne en question ;
puisque l'adresse de Generer n'est pas null, le resultat de la
conversion est toujours vrai, et on doit afficher "1".
C'est ce que fait g++ et Sun CC. G++ émet un avertissement,
aussi, signalant que le resultat de la conversion est toujours
vrai -- c'est une bonne idée, parce que la plupart du temps,
quand on convertit un nom d'une fonction en bool, c'est suite à
une erreur de programmation.
--
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
La fonction s'appelle Generer, j'ai fait ca : std::cout<<Generer();
et ca me sort un truc genre 00411DF
On dirait une adresse. Tu n'as pas oublié les parenthèses de l'appel à Generer ? Un truc comme ça :
std::cout << Generer;
ce qui te ferait afficher l'adresse de la fonction...
Ça ne doit pas le faire. Si Generer est une fonction, il n'y a pas de << (standard, en tout cas) qui peut sortir son adresse. On ne peut sortir que les adresses des données.
En fait, il y a bien une conversion implicite de « pointeur à fonction » en bool, et un opérateur << pour bool. Un compilateur est donc obligé à accepter la ligne en question ; puisque l'adresse de Generer n'est pas null, le resultat de la conversion est toujours vrai, et on doit afficher "1".
C'est ce que fait g++ et Sun CC. G++ émet un avertissement, aussi, signalant que le resultat de la conversion est toujours vrai -- c'est une bonne idée, parce que la plupart du temps, quand on convertit un nom d'une fonction en bool, c'est suite à une erreur de programmation.
-- James Kanze (GABI Software) email: 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