IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SL & STL C++ Discussion :

comment "ré-initialiser" un flux


Sujet :

SL & STL C++

  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2004
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 187
    Par défaut comment "ré-initialiser" un flux
    Bonsoir à tous!

    J'avais besoin de "caster" un string appartenant à une classe en int et en suivant la faq j'y suis arrivé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    std::istream& operator>>(std::istream& istr,CCoord& c)
    {
        char col;//les futurs coordonnees
        int y;    //****************************
        istr>>col>>y;//Leurs affectations
     
        //test aff
        std::cout<<"x = "<<col<<"\ty = "<<y<<std::endl;
     
        int icol;  //pour le "cast" du char en int
        icol=int(col);//*****************************
     
        //nouvelle affectation de c
        c=CCoord(icol-96,y); //col-96 pour transposer sur la valeur numeraire de la colonne
        std::cout<<"coord: ";c._affiche();std::cout<<std::endl;
        return istr;
    }
    seulement voila je ne parviens pas à utiliser ce code plusieurs fois consécutivement. Voici la portion de code qui bloque: (m_isstr est un std::istringstream membre d'une classe)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    case LONGMVT:std::cout<<"Traitement du LONGMVT"<<std::endl;
    
            //repartition des elements de la chaine en plusieurs strings
            m_scoordo.assign(m_flux,0,2);m_scoordc.assign(m_flux,2,2);
    
            //separation des valeurs par un espace
            m_scoordo.insert(1," ");m_scoordc.insert(1," ");
    
            //test aff
            std::cout<<"m_scoordo : "<<m_scoordo<<"\tm_scoordc : "<<m_scoordc<<std::endl;
    
            //on affecte les membres m_coordx via m_isstr (istringstream)
            m_isstr.str(m_scoordo);m_isstr>>m_coordo;
            m_isstr.str(m_scoordc);m_isstr>>m_coordc; --> les valeurs extraites içi 
    sont chaotiques. Si je commente la ligne,
    le code marche...une fois. Puis je me retrouve face au même problème.
    
            std::cout<<"Test aff: coord org = ";m_coordo._affiche();
            std::cout<<"\tcoord cib = ";m_coordc._affiche();
            std::cout<<std::endl;
    
            break;
    J'ai essaiyé de "ré-initialiser le istringstream avec .str("") mais rien n'y fait. Je continue de chercher mais si quelqu'un sait...merci.

  2. #2
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    str("") remet la chaine à 0, pas les flags de lecture.
    Pour remettre l'état à 0, il faut utiliser clear().

    regarde cette discution pour plus d'info:
    http://groups.google.com/group/fr.co...9557036f?pli=1
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2004
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 187
    Par défaut

    en ajoutant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_isstr.str("");m_isstr.clear();
    Le code fonctionne.
    Merci aussi pour le lien qui m'a permis de clarifier mes "connaissances" sur les flux.

+ Répondre à la discussion
Cette discussion est résolue.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo