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

C++ Discussion :

Valeur d'un stringstream qui ne change pas dans une boucle


Sujet :

C++

  1. #1
    Membre régulier Avatar de Hypnos
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2002
    Messages : 87
    Points : 108
    Points
    108
    Par défaut Valeur d'un stringstream qui ne change pas dans une boucle
    Bonjour,

    J'ai un problème avec une variable de type stringstream, dont la valeur ne change pas dans une boucle.
    J'ai créé une structure qui contient des strings. Je dois convertir l'une de ces strings en int pour un for().

    Je crée donc un stringstream pour faire la conversion et je transfère la string de ma structure dans le stringstream et ensuite j'envoie le stringstream vers mon int.

    Ca marche très bien à la première itération, mais au second passage dans ma boucle, il indique la même valeur pour mon int, la conversion ne se fait donc pas ou en tout cas le stringstream n'accepte pas la nouvelle valeur.

    J'ai lu sur un autre forum de placer la déclaration du stringstream dans ma boucle pour la réinitialiser à chaque tour de boucle, mais je suppose que ça prend des ressources inutilement.

    Ma question donc, pourquoi la valeur de mon int ne change pas ?

    Ici j'ai essayé quelque chose et j'ai été surpris du résultat :
    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
    23
    24
    25
    26
    27
    #include <iostream>
    #include <fstream>
    #include <sstream>
    #include <string>
     
    using namespace std;
     
    struct f3X
    {
    	string data;
    };
     
    int main(int argc, char*argv[]) {
     
    	f3X f3xt[5];
    	stringstream ss_in;
    	int nbr_ss;
     
    	for(int i = 0; i < 5; i++) {
    		ss_in << i;
    		f3xt[i].data = ss_in.str();
     
    		cout << "i : " << i << endl;
    		cout << "ss_in.str() : " << ss_in.str() << endl;
    		cout << "f3xt[" << i << "].data : " << f3xt[i].data << endl << endl;
    	}
    }
    En sortie j'ai :
    i : 0
    ss_in.str() : 0
    f3xt[0].data : 0

    i : 1
    ss_in.str() : 01
    f3xt[1].data : 01

    i : 2
    ss_in.str() : 012
    f3xt[2].data : 012

    i : 3
    ss_in.str() : 0123
    f3xt[3].data : 0123

    i : 4
    ss_in.str() : 01234
    f3xt[4].data : 01234
    Comment se fait-il que la chaîne s'allonge à chaque fois au lieu de passer simplement de 0 à 1, à 2, etc. ?

    Merci.
    Cordialement.
    Errare humanum est ... sed humanus naturae erratum est.

  2. #2
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Points : 641
    Points
    641
    Par défaut
    Tout a fait normal que ta chaine s'allonge. C'est bien le role de l'opérateur <<
    (quand tu l'utilise pour un fichier, c'est bien comme cela que ça marche)

    Il faudrait qu'a chaque ittération tu repartes avec une chaine vide.
    Soit en vidant :
    ss_in.clear();
    ss_in.str(string());
    Soit en déclarant ton stringstream dans la boucle.

  3. #3
    Membre régulier Avatar de Hypnos
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2002
    Messages : 87
    Points : 108
    Points
    108
    Par défaut
    Merci de l'explication pour l'opérateur, je n'avais pas réfléchi, mais effectivement le comportement est identique pour mon fichier.

    J'ai mis la déclaration dans ma boucle finalement.
    Merci.
    Errare humanum est ... sed humanus naturae erratum est.

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

Discussions similaires

  1. Variable x ne change pas dans une boucle
    Par Krower dans le forum Excel
    Réponses: 2
    Dernier message: 28/06/2015, 22h28
  2. Réponses: 5
    Dernier message: 27/04/2010, 14h55
  3. Réponses: 6
    Dernier message: 22/05/2007, 09h55
  4. Réponses: 1
    Dernier message: 21/12/2006, 11h17
  5. Réponses: 10
    Dernier message: 15/12/2006, 07h34

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