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 :

Remplissage de vector dans une boucle


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 86
    Par défaut Remplissage de vector dans une boucle
    Bonjour,
    J'ai un petit problème avec les données que je récupère dans un vecteur.
    Ce que j'essaye de faire, c'est de lire des données depuis un fichier, les mettre dans un vector, et les utiliser dans un fichier (avec du opengl).

    Quand je lit les données depuis le fichier, que je remplis le vecteur et que j'affiche directement les données à l'écran, tout va bien. Mais quand j'essaie de faire la même chose en incluant de l'opengl, ça ne marche plus. Il n'y a aucune erreur de compilation, mais l'affichage va pas du tout.

    Donc, ce que je fais pour remplir le vecteur, c'est un push_back (normal quoi), mais je l'ai mis dans une boucle (je lis chaque ligne du fichier, je la met dans une variable, et je met cette variable dans le vecteur, puis je recommence).

    Ce que je crois, c'est que, comme c'est toujours la même variable qui me sert à chaque tour (je ne sais pas combien de données j'aurai, et ça sera de toute manière assez énorme), l'élément dans le vecteur est en fait une sorte de pointeur vers cette variable, et donc quand la variable change, les données dans le vecteur changent aussi.

    J'ai fait pas mal de tests, et je ne vois que ce problème possible.

    Est-ce que vous auriez une solution pour que les données du vecteur ne changent pas quand la variable change?

    Merci d'avance

  2. #2
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 371
    Par défaut
    t'as pas un bout de code a nous soumettre ?
    ca pourrait aider

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 86
    Par défaut
    Voilà mon code le plus récent, j'ai déjà essayé avec istringstream, mais ça marche pas non plus, donc là j'essaye la conversion string en float avec atof.

    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
    28
    29
     
    ...
    ifstream fichier("truc.txt");
    const char * machin;
    string ligne, flottant;
    vector<const char *> coord;
    float float1;
    ...
    coord.clear();
    getline(fichier,ligne);
    for (int i = 0; i<4; i++) //je veux lire que les 4 premières lignes pour l'instant
       {istringstream temp(ligne);
         while (getline(temp,flottant,'\t')) //on récupère les valeurs séparés par des tab
            {machin= ((string)flottant).c_str();
              coord.push_back(machin);}
         getline(fichier,ligne);
         }
    glColor3d (0.84f,0.64f,0.97f);
    int j = 0;
    glBegin (GL_POLYGON);
    while (j < coord.size())
       {float1 = (float)(atof(coord[j]));
         float2 = (float)atof(coord[j+1]);
         float3 = (float)atof(coord[j+2]);
         glVertex3f (((float)float1)+58.0f,((float)float3)-7.0f,((float)float2)-10.0f);
        j+=3;
       }
    glEnd();
    ...
    Donc, j'ai déjà essayé de remplir le vector avec directement des flottants en utilisant istrinstream ou atof, mais ça n'affiche pas ce qu'il faut. J'ai aussi essayé de remplir le vecteur avec des strings et de les convertir après, toujours sans succès.

    J'ai aussi mis des sorties pour voir ce que valent mes valeurs (je ne les ai pas mises dans le bout de code ci-dessus), et donc en mettant des flottants ou des strings dans le vecteur, j'obtenais bien les valeurs que je voulais (dans le tableau), mais pas à l'affichage. En remplissant le tableau à la main plutôt que par la lecture du fichier, ça marche.
    Enfin, j'ai quand même eu un problème en remplissant à la main le vecteur de string : j'avais oublié les ", et même si la sortie me donnait les bonnes valeurs, l'affichage n'était pas bon... en remettant les guillements, tout est rentré dans l'ordre.... Problème de string?

    Ce code que j'ai passé ne marche pas non plus, et en sortie aussi. Dans la boucle de lecture du fichier, j'ai bien les bonnes valeurs, mais dans la boucle d'affichage, le vecteur ne contient que des éléments vides! C'est vraiment bizarre...

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Evite les mix entre char* et conteneurs, ça fonctionne rarement. Ensuite tu te prends la tête pour pas grand chose, utilise plutôt l'opérateur d'extraction >> pour sortir des nombres de ton fichier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ifstream fichier("truc.txt");
    float float1, float2, float3;
    fichier >> float1 >> float2 >> float3;

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 86
    Par défaut
    Merci, mais ça marche toujours pas à l'affichage.
    Oui je sais, je me prend la tête,;au début j'avais fait simple avec des istringstream, mais finalement j'en suis venue à essayer tout plein d'autres solutions, de plus en plus tarabiscotées, mais ça ne fonctionne pas comme ça apparament.
    Je continue à chercher.

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Merci, mais ça marche toujours pas à l'affichage
    De deux choses l'une : soit tes informations sont mal lues à partir du fichier (facilement vérifiable) et dans ce cas on n'a pas résolu le problème et il faudra donner plus de précisions ; soit tes flottants sont bien lus et alors il s'agit sans doute plutôt d'un problème lié à OpenGL.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 86
    Par défaut
    Bonne année!

    Oui, les informations semblent être bien lues, j'ai testé, pour ça il n'y a pas de problèmes. J'ai même testé si la conversion string float était réussie (avec l'opérateur >> de istringstream, avec une autre méthode que celle que tu proposais), et c'était bien le cas.

    Je me demande plutôt si les string ou float avec Visual sont bien standard, vu que ça marche quand je remplis à la main (en précisant bien le type de mes données).

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/03/2013, 21h44
  2. Réponses: 7
    Dernier message: 22/02/2012, 10h24
  3. Remplissage d'une structure dans une boucle for
    Par Lorddolf dans le forum MATLAB
    Réponses: 4
    Dernier message: 07/04/2011, 16h52
  4. Remplissage d'un vector<> dans une boucle for
    Par syl1405 dans le forum C++
    Réponses: 13
    Dernier message: 26/07/2010, 11h01
  5. réinitialiser un vector dans une boucle
    Par befalimpertinent dans le forum SL & STL
    Réponses: 8
    Dernier message: 31/10/2007, 14h39

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