"Sylvain Togni" <"sylvain.togni at visionobjects.com"> a écrit dans le message de news: 45afba56$0$21145$
Bonjour, Est-ce que c'est normal que le test suivant échoue (VC++ 2005) ?
std::istringstream test("1,2,3"); int i; assert(test >> i);
-- chez moi (C++Builder 2006) le code suivant passe, et affiche 1 :
std::istrstream test("1,2,3"); int i; assert(test>>i); std::cout<<i;
par contre il ne connait pas istringstream chez moi mais istrstream, étrange, non ?
Sylvain
Sylvain Togni wrote on 18/01/2007 19:20:
Bonjour, Est-ce que c'est normal que le test suivant échoue (VC++ 2005) ?
std::istringstream test("1,2,3"); int i; assert(test >> i);
si iss utilise une locale et que celle-ci accepte (requiert) la virgule comme séparateur décimal (cas de la locale FR par défaut); alors oui c'est normal.
Sylvain.
Sylvain Togni wrote on 18/01/2007 19:20:
Bonjour,
Est-ce que c'est normal que le test suivant échoue (VC++ 2005) ?
std::istringstream test("1,2,3");
int i;
assert(test >> i);
si iss utilise une locale et que celle-ci accepte (requiert) la virgule
comme séparateur décimal (cas de la locale FR par défaut); alors oui
c'est normal.
Bonjour, Est-ce que c'est normal que le test suivant échoue (VC++ 2005) ?
std::istringstream test("1,2,3"); int i; assert(test >> i);
si iss utilise une locale et que celle-ci accepte (requiert) la virgule comme séparateur décimal (cas de la locale FR par défaut); alors oui c'est normal.
Sylvain.
Jean-Marc Bourguet
Sylvain writes:
Sylvain Togni wrote on 18/01/2007 19:20:
Bonjour, Est-ce que c'est normal que le test suivant échoue (VC++ 2005) ? std::istringstream test("1,2,3"); int i; assert(test >> i);
Je ne vois aucune raison.
si iss utilise une locale et que celle-ci accepte (requiert) la virgule comme séparateur décimal (cas de la locale FR par défaut); alors oui c'est normal.
Je ne vois pas pourquoi.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Sylvain <noSpam@mail.net> writes:
Sylvain Togni wrote on 18/01/2007 19:20:
Bonjour,
Est-ce que c'est normal que le test suivant échoue (VC++ 2005) ?
std::istringstream test("1,2,3");
int i;
assert(test >> i);
Je ne vois aucune raison.
si iss utilise une locale et que celle-ci accepte (requiert) la virgule
comme séparateur décimal (cas de la locale FR par défaut); alors oui c'est
normal.
Je ne vois pas pourquoi.
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Bonjour, Est-ce que c'est normal que le test suivant échoue (VC++ 2005) ? std::istringstream test("1,2,3"); int i; assert(test >> i);
Je ne vois aucune raison.
si iss utilise une locale et que celle-ci accepte (requiert) la virgule comme séparateur décimal (cas de la locale FR par défaut); alors oui c'est normal.
Je ne vois pas pourquoi.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Jean-Marc Bourguet
"Alexandre" writes:
"Sylvain Togni" <"sylvain.togni at visionobjects.com"> a écrit dans le message de news: 45afba56$0$21145$
Bonjour, Est-ce que c'est normal que le test suivant échoue (VC++ 2005) ?
std::istringstream test("1,2,3"); int i; assert(test >> i);
-- chez moi (C++Builder 2006) le code suivant passe, et affiche 1 :
std::istrstream test("1,2,3"); int i; assert(test>>i); std::cout<<i;
par contre il ne connait pas istringstream chez moi mais istrstream, étrange, non ?
istringsteam est declare dans sstream.
istrstream est officiellement obsolete.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
"Alexandre" <alex.g@netcourrier.com> writes:
"Sylvain Togni" <"sylvain.togni at visionobjects.com"> a écrit dans le
message de news: 45afba56$0$21145$7a628cd7@news.club-internet.fr...
Bonjour,
Est-ce que c'est normal que le test suivant échoue (VC++ 2005) ?
std::istringstream test("1,2,3");
int i;
assert(test >> i);
--
chez moi (C++Builder 2006) le code suivant passe, et affiche 1 :
std::istrstream test("1,2,3");
int i;
assert(test>>i);
std::cout<<i;
par contre il ne connait pas istringstream chez moi mais istrstream,
étrange, non ?
istringsteam est declare dans sstream.
istrstream est officiellement obsolete.
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
"Sylvain Togni" <"sylvain.togni at visionobjects.com"> a écrit dans le message de news: 45afba56$0$21145$
Bonjour, Est-ce que c'est normal que le test suivant échoue (VC++ 2005) ?
std::istringstream test("1,2,3"); int i; assert(test >> i);
-- chez moi (C++Builder 2006) le code suivant passe, et affiche 1 :
std::istrstream test("1,2,3"); int i; assert(test>>i); std::cout<<i;
par contre il ne connait pas istringstream chez moi mais istrstream, étrange, non ?
istringsteam est declare dans sstream.
istrstream est officiellement obsolete.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Le Fri, 19 Jan 2007 08:56:34 +0100, Jean-Marc Bourguet a écrit :
Sylvain writes:
Sylvain Togni wrote on 18/01/2007 19:20:
Bonjour, Est-ce que c'est normal que le test suivant échoue (VC++ 2005) ? std::istringstream test("1,2,3"); int i; assert(test >> i);
Je ne vois aucune raison.
si iss utilise une locale et que celle-ci accepte (requiert) la virgule comme séparateur décimal (cas de la locale FR par défaut); alors oui c'est normal.
Je ne vois pas pourquoi.
Je me risque à une réponse de normand, ça peut être normal ou pas ;) La question est de savoir ce qui est un séparateur ou pas et comme le fait remarquer Sylvain, ça dépend des locales. Si je comprends bien le problème cela revient à discuter de l'extracteur dans une chaîne. Le standard dit ceci:
21.3.7.9 Inserters and extractors [lib.string.io] template<class charT, class traits, class Allocator> basic_istream<charT,traits>& operator>>(basic_istream<charT,traits>& is, basic_string<charT,traits,Allocator>& str); Effects: Begins by constructing a sentry object k as if k were constructed by typename 1 basic_istream<charT,traits>::sentry k(is). If bool(k) is true, it calls str.erase() and then extracts characters from is and appends them to str as if by calling str.append(1,c). If is.width() is greater than zero, the maximum number n of characters appended is is.width(); otherwise n is str.max_size(). Characters are extracted and appended until any of the following occurs: - n characters are stored; - end-of-file occurs on the input sequence; - isspace(c,is.getloc()) is true for the next available input character c. After the last character (if any) is extracted, is.width(0) is called and the sentry object k is 2 destroyed.
donc tout dépend de ce que retourne isspace(c,is.getloc());
--
Alain
Le Fri, 19 Jan 2007 08:56:34 +0100, Jean-Marc Bourguet a écrit :
Sylvain <noSpam@mail.net> writes:
Sylvain Togni wrote on 18/01/2007 19:20:
Bonjour,
Est-ce que c'est normal que le test suivant échoue (VC++ 2005) ?
std::istringstream test("1,2,3");
int i;
assert(test >> i);
Je ne vois aucune raison.
si iss utilise une locale et que celle-ci accepte (requiert) la virgule
comme séparateur décimal (cas de la locale FR par défaut); alors oui c'est
normal.
Je ne vois pas pourquoi.
Je me risque à une réponse de normand, ça peut être normal ou pas ;) La
question est de savoir ce qui est un séparateur ou pas et comme le fait
remarquer Sylvain, ça dépend des locales. Si je comprends bien le
problème cela revient à discuter de l'extracteur dans une chaîne. Le
standard dit ceci:
21.3.7.9 Inserters and extractors [lib.string.io]
template<class charT, class traits, class Allocator>
basic_istream<charT,traits>&
operator>>(basic_istream<charT,traits>& is,
basic_string<charT,traits,Allocator>& str);
Effects: Begins by constructing a sentry object k as if k were constructed by typename
1
basic_istream<charT,traits>::sentry k(is). If bool(k) is true, it calls
str.erase() and then extracts characters from is and appends them to str as if by calling
str.append(1,c). If is.width() is greater than zero, the maximum number n of characters
appended is is.width(); otherwise n is str.max_size(). Characters are extracted and appended until any of the following occurs:
- n characters are stored;
- end-of-file occurs on the input sequence;
- isspace(c,is.getloc()) is true for the next available input character
c.
After the last character (if any) is extracted, is.width(0) is called
and the sentry object k is
2
destroyed.
donc tout dépend de ce que retourne isspace(c,is.getloc());
Le Fri, 19 Jan 2007 08:56:34 +0100, Jean-Marc Bourguet a écrit :
Sylvain writes:
Sylvain Togni wrote on 18/01/2007 19:20:
Bonjour, Est-ce que c'est normal que le test suivant échoue (VC++ 2005) ? std::istringstream test("1,2,3"); int i; assert(test >> i);
Je ne vois aucune raison.
si iss utilise une locale et que celle-ci accepte (requiert) la virgule comme séparateur décimal (cas de la locale FR par défaut); alors oui c'est normal.
Je ne vois pas pourquoi.
Je me risque à une réponse de normand, ça peut être normal ou pas ;) La question est de savoir ce qui est un séparateur ou pas et comme le fait remarquer Sylvain, ça dépend des locales. Si je comprends bien le problème cela revient à discuter de l'extracteur dans une chaîne. Le standard dit ceci:
21.3.7.9 Inserters and extractors [lib.string.io] template<class charT, class traits, class Allocator> basic_istream<charT,traits>& operator>>(basic_istream<charT,traits>& is, basic_string<charT,traits,Allocator>& str); Effects: Begins by constructing a sentry object k as if k were constructed by typename 1 basic_istream<charT,traits>::sentry k(is). If bool(k) is true, it calls str.erase() and then extracts characters from is and appends them to str as if by calling str.append(1,c). If is.width() is greater than zero, the maximum number n of characters appended is is.width(); otherwise n is str.max_size(). Characters are extracted and appended until any of the following occurs: - n characters are stored; - end-of-file occurs on the input sequence; - isspace(c,is.getloc()) is true for the next available input character c. After the last character (if any) is extracted, is.width(0) is called and the sentry object k is 2 destroyed.
donc tout dépend de ce que retourne isspace(c,is.getloc());
--
Alain
Sylvain Togni
Sylvain wrote:
si iss utilise une locale et que celle-ci accepte (requiert) la virgule comme séparateur décimal (cas de la locale FR par défaut); alors oui c'est normal.
Effectivement, le problème viens bien du fait que la virgule est considérée comme le séparateur des milliers par la locale.
Mais apparemment, c'est bien un bug, cf. <http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID836>
-- Sylvain Togni
Sylvain wrote:
si iss utilise une locale et que celle-ci accepte (requiert) la virgule
comme séparateur décimal (cas de la locale FR par défaut); alors oui
c'est normal.
Effectivement, le problème viens bien du fait que la virgule
est considérée comme le séparateur des milliers par la locale.
Mais apparemment, c'est bien un bug, cf.
<http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID836>
si iss utilise une locale et que celle-ci accepte (requiert) la virgule comme séparateur décimal (cas de la locale FR par défaut); alors oui c'est normal.
Effectivement, le problème viens bien du fait que la virgule est considérée comme le séparateur des milliers par la locale.
Mais apparemment, c'est bien un bug, cf. <http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID836>
-- Sylvain Togni
Jean-Marc Bourguet
Alain Gaillard writes:
Le Fri, 19 Jan 2007 08:56:34 +0100, Jean-Marc Bourguet a écrit :
Sylvain writes:
Sylvain Togni wrote on 18/01/2007 19:20:
Bonjour, Est-ce que c'est normal que le test suivant échoue (VC++ 2005) ? std::istringstream test("1,2,3"); int i; assert(test >> i);
Je ne vois aucune raison.
si iss utilise une locale et que celle-ci accepte (requiert) la virgule comme séparateur décimal (cas de la locale FR par défaut); alors oui c'est normal.
Je ne vois pas pourquoi.
Je me risque à une réponse de normand, ça peut être normal ou pas ;) La [... description de >> pour des std::string...]
Je ne vois pas en quoi le comportement pour >> avec des int est influence par les exigences de la norme pour >> sur des chaines de caracteres.
Je sais bien que >> pour des int est aussi influence par les locales, mais je ne vois pas de raisons pour laquelle avoir une virgule comme separateur decimal doit rendre invalide "1," comme entree d'entier (il ne doit par exemple pas y avoir d'erreur pour "1.2.3" dans la locale "C", la seule decrite par la norme alors que . y est le separateur decimal).
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Le Fri, 19 Jan 2007 08:56:34 +0100, Jean-Marc Bourguet a écrit :
Sylvain <noSpam@mail.net> writes:
Sylvain Togni wrote on 18/01/2007 19:20:
Bonjour,
Est-ce que c'est normal que le test suivant échoue (VC++ 2005) ?
std::istringstream test("1,2,3");
int i;
assert(test >> i);
Je ne vois aucune raison.
si iss utilise une locale et que celle-ci accepte (requiert) la virgule
comme séparateur décimal (cas de la locale FR par défaut); alors oui c'est
normal.
Je ne vois pas pourquoi.
Je me risque à une réponse de normand, ça peut être normal ou pas ;) La
[... description de >> pour des std::string...]
Je ne vois pas en quoi le comportement pour >> avec des int est influence
par les exigences de la norme pour >> sur des chaines de caracteres.
Je sais bien que >> pour des int est aussi influence par les locales, mais
je ne vois pas de raisons pour laquelle avoir une virgule comme separateur
decimal doit rendre invalide "1," comme entree d'entier (il ne doit par
exemple pas y avoir d'erreur pour "1.2.3" dans la locale "C", la seule
decrite par la norme alors que . y est le separateur decimal).
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Le Fri, 19 Jan 2007 08:56:34 +0100, Jean-Marc Bourguet a écrit :
Sylvain writes:
Sylvain Togni wrote on 18/01/2007 19:20:
Bonjour, Est-ce que c'est normal que le test suivant échoue (VC++ 2005) ? std::istringstream test("1,2,3"); int i; assert(test >> i);
Je ne vois aucune raison.
si iss utilise une locale et que celle-ci accepte (requiert) la virgule comme séparateur décimal (cas de la locale FR par défaut); alors oui c'est normal.
Je ne vois pas pourquoi.
Je me risque à une réponse de normand, ça peut être normal ou pas ;) La [... description de >> pour des std::string...]
Je ne vois pas en quoi le comportement pour >> avec des int est influence par les exigences de la norme pour >> sur des chaines de caracteres.
Je sais bien que >> pour des int est aussi influence par les locales, mais je ne vois pas de raisons pour laquelle avoir une virgule comme separateur decimal doit rendre invalide "1," comme entree d'entier (il ne doit par exemple pas y avoir d'erreur pour "1.2.3" dans la locale "C", la seule decrite par la norme alors que . y est le separateur decimal).
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Alain Gaillard
Je sais bien que >> pour des int est aussi influence par les locales, mais je ne vois pas de raisons pour laquelle avoir une virgule comme separateur decimal doit rendre invalide "1," comme entree d'entier (il ne doit par exemple pas y avoir d'erreur pour "1.2.3" dans la locale "C", la seule decrite par la norme alors que . y est le separateur decimal).
Je n'ai pas dis "doit" rendre invalide. J'ai dit que ça se pouvait, éventuellement si bug dans l'implémentation il y a (ça semble être le cas, voir post de Sylvain Togni plus haut) ou si dans la locale utilisée "," n'est pas un séparateur. Sur le fond je suis d'accord avec toi et c'est bien pour ça que j'ai fait une réponse de normand :)
--
Alain
Je sais bien que >> pour des int est aussi influence par les locales, mais
je ne vois pas de raisons pour laquelle avoir une virgule comme separateur
decimal doit rendre invalide "1," comme entree d'entier (il ne doit par
exemple pas y avoir d'erreur pour "1.2.3" dans la locale "C", la seule
decrite par la norme alors que . y est le separateur decimal).
Je n'ai pas dis "doit" rendre invalide. J'ai dit que ça se pouvait,
éventuellement si bug dans l'implémentation il y a (ça semble être le
cas, voir post de Sylvain Togni plus haut) ou si dans la locale utilisée
"," n'est pas un séparateur. Sur le fond je suis d'accord avec toi et
c'est bien pour ça que j'ai fait une réponse de normand :)
Je sais bien que >> pour des int est aussi influence par les locales, mais je ne vois pas de raisons pour laquelle avoir une virgule comme separateur decimal doit rendre invalide "1," comme entree d'entier (il ne doit par exemple pas y avoir d'erreur pour "1.2.3" dans la locale "C", la seule decrite par la norme alors que . y est le separateur decimal).
Je n'ai pas dis "doit" rendre invalide. J'ai dit que ça se pouvait, éventuellement si bug dans l'implémentation il y a (ça semble être le cas, voir post de Sylvain Togni plus haut) ou si dans la locale utilisée "," n'est pas un séparateur. Sur le fond je suis d'accord avec toi et c'est bien pour ça que j'ai fait une réponse de normand :)
--
Alain
Alexandre
"Alain Gaillard" a écrit dans le message de news:
istringsteam est declare dans sstream.
istrstream est officiellement obsolete.
C++ Builder 6 aussi. ;-)
dans mon post j'indiquais utiliser C++ Builder 2006, pas la version 6 ;-)
"Alain Gaillard" <alain_gaillard28@hotmail.com> a écrit dans le message de
news: pan.2007.01.19.09.43.08.577362@hotmail.com...
istringsteam est declare dans sstream.
istrstream est officiellement obsolete.
C++ Builder 6 aussi. ;-)
dans mon post j'indiquais utiliser C++ Builder 2006, pas la version 6 ;-)