Afficher un message
Vieux 10/04/2008, 08h22   #5
Michael DOUBEZ
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Probleme avec istringstream

James Kanze a écrit :
> On Apr 8, 5:16 pm, Guillaume GOURDIN <tr...@hotmail.com> wrote:
>> Bonjour à tous, j'ai un problème avec le code suivant :

>
>> #include <sstream>
>> #include <iostream>
>> #include <stdint.h>
>> using namespace std;

>
>> int main(int argc, char ** argv)
>> {
>> string s("endor ID Low Byte");
>> istringstream iss;
>> uint32_t tmp;

>
>> iss.str( s );

>
>> if ( !(iss >> hex >> tmp) )
>> {
>> return ( false );
>> }

>
>> cout << tmp << endl;

>
>> return ( true );
>> }

>
>> Pour ce code, "endor ID Low Byte" est une représentation
>> hexadécimal de 14... Quelqu'un peut-il me dire ce que je fais
>> pas bien?

>
> Rien. Ta chaîne commence bien par un nombre hexadécimal qui a la
> valeur 14. Si tu veux vérifer que c'est tout ce qu'il
> contient :
>
> if ( iss >> std::hex >> tmp >> std::ws
> && iss.get() == EOF ) {
> // c'est bon
> }
>
> Attention, en revanche. J'ai déjà rencontré des manipulateur
> std::ws qui positionnait failbit s'il était déjà à la fin (parce
> qu'il construisait un istream::sentry avant de commencer à
> lire), bien qu'un manipulateur ne doit jamais positionner
> failbit.


Je ne comprends pas le problème dans ce cas là:
- si il était déjà à la fin, il positionne failbit et le get suivant
retourne bien EOF. Donc, la stream ne contenait bien que l'entier
- si il n'était pas à la fin, après cela, si la stream est épuisée,
alors get() va de toutes façon positionner failbit.

Michael
  Réponse avec citation
 
Page generated in 0,06885 seconds with 9 queries