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 :

fstream >> probleme avec les entiers


Sujet :

SL & STL C++

  1. #1
    Acropole
    Invité(e)
    Par défaut fstream >> probleme avec les entiers
    bonjour,

    Voici deux fonctions, la première ouvre un fichier et lit certains paramètres avant d'entrer dans une boucle for qui appelle la seconde fonction.
    Cette dernière reçoit le fstream par référence et continu à lire le fichier.

    Mais un problème survient du fait que nbrSysParticules est un entier. Une fois qu'il est lut aucun flottant ne passe. Seuls les entiers et les chaines sont acceptées, si bien que Pivot.position.x, dans la deuxième fonction, ne reçoit aucune valeur.

    Le fichier est en fin de post.

    Ce n'est pas la première fois que ça m'arrive et j'avais réussit à régler le problème avec setprecision(), mais cette fois-ci rien n'y fait.
    Je ne comprend pas d'où vient le problème.
    Quelqu'un peut-il m'aider ?

    merci

    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
    30
    31
    32
    33
    void VAISSEAU::charger(string &nomFichier)
    {
    	fstream fichier;
    	string FSource("objets3D\\vaisseaux\\");
    //génération de la chaine ciblant le fichier
    	FSource = FSource + nomFichier + ".vmh";
    	fichier.open(FSource.data(), ios::in);
     
    	if(fichier.is_open())
    	{
    		string temp;
     
    		fichier >> temp >> parametres.vitesseFrontaleMax;
    		fichier >> temp >> parametres.vitesseLateraleMax;
    		fichier >> temp >> parametres.vitesseVerticaleMax;
    		fichier >> temp >> parametres.rotationMax;
    		fichier >> temp >> nbrSysParticules;
     
    		if(nbrSysParticules > 0)
    		{
    			sParticules = new sysParticules*[nbrSysParticules];
     
    			for(int i = 0; i < nbrSysParticules; i++)
    				sParticules[i]->charger(fichier);
    		}
     
    		fichier.close();
    	}
    	else
    	{
    	}
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void sysParticules::charger(fstream &Fichier)
    {
    	string temp;
     
    	Fichier >> temp >> Pivot.position.x;
    	Fichier >> temp >> Pivot.position.y;
    	Fichier >> temp >> Pivot.position.z;
    	Fichier >> temp >> temp;
     
    	MultiMat->ouvrir(temp);
    }
    vitesseFrontaleMax 10.0
    vitesseLateraleMax 20.0
    vitesseVerticaleMax 30.0
    rotationMax 40.0

    nbrSysParticules 1

    position_X 0.0
    position_Y 0.0
    position_Z 0.0
    nomShader flamReacteurs01

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Août 2003
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 159
    Points : 171
    Points
    171
    Par défaut
    La valeur de nbrSysParticules est-elle correctement lue ?

  3. #3
    Membre averti Avatar de xxiemeciel
    Inscrit en
    Juin 2005
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 371
    Points : 352
    Points
    352
    Par défaut
    Salut,

    es tu sure de ne pas lire la ligne vide entre rotation et nbrSysParticules ?

    XXiemeciel

  4. #4
    Acropole
    Invité(e)
    Par défaut
    Suprimer les lignes vides ne change rien.

    nbrSysParticules est correctement lu.

    par contre aprés coup il y'a bloquage total sur position_X.

    si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void sysParticules::charger(fstream &Fichier)
    {
    	string temp;
    	float flottant;
    	Fichier >> temp >> flottant;
    	Pivot.position.x = flottant;
    	Fichier >> temp >> flottant;
    	Pivot.position.y = flottant;
    	Fichier >> temp >> flottant;
    	Pivot.position.z = flottant;
    	Fichier >> temp >> temp;
     
    	MultiMat->ouvrir(temp);
    }
    la valeur est bien lue dans le fichier mais il y'a erreur d'écriture lors de l'affectation a Pivot.position.x

  5. #5
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut Re: fstream >> probleme avec les entiers
    Citation Envoyé par Acropole
    Ce n'est pas la première fois que ça m'arrive et j'avais réussit à régler le problème avec setprecision(), mais cette fois-ci rien n'y fait.
    J'ai comme l'impression que le problème était différent. Je ne suis pas un spécialiste des IO, mais je ne vois pas d'influence de setprecision() sur les entrées.

    Je trouve ton code ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       sParticules = new sysParticules*[nbrSysParticules];
       for(int i = 0; i < nbrSysParticules; i++)
          sParticules[i]->charger(fichier);
    très suspect: tu alloues un tableau de pointeurs (pourquoi ne pas utiliser std::vector au fait?) et puis tu te mets à utiliser les pointeurs sans avoir allouer ceux-ci...

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut Re: fstream >> probleme avec les entiers
    remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sParticules = new sysParticules*[nbrSysParticules];
    for(int i = 0; i < nbrSysParticules; i++)
    		sParticules[i]->charger(fichier);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sParticules = new sysParticules[nbrSysParticules];
    for(int i = 0; i < nbrSysParticules; i++)
    		sParticules[i].charger(fichier);
    avec sysParticules * sParticules;
    sinon il te manque une etape, l'initialisation des pointeur.

    ps : avec VC++ ca peut ne pas planter mais ca fait n'importe quoi

  7. #7
    Acropole
    Invité(e)
    Par défaut
    exact, le problème venait du fait que je ne créait pas les sysParticules dans la boucle for.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    		if(nbrSysParticules > 0)
    		{
    			sParticules = new sysParticules*[nbrSysParticules];
     
    			for(int i = 0; i < nbrSysParticules; i++)
    			{
    				sParticules[i] = new sysParticules;
    				sParticules[i]->charger(fichier);
    			}
    		}
    la ça marche sans problème.

    Je n'utilise pas encore les vector car j'ai eu des problèmes pour les utiliser correctement. Je m'y remetrai lorsuqe ça deviendra nécessaire (c'est à dire bientot). Pour le moment ça marche trés bien avec les tableaux de pointeur.

Discussions similaires

  1. Help!! Probleme avec les dates sur SQL SERVER
    Par Nadaa dans le forum MS SQL Server
    Réponses: 16
    Dernier message: 03/08/2006, 16h55
  2. PROBLEME AVEC LES REQUETES IS NULL / NOT EXISTS
    Par sylvaine dans le forum Langage SQL
    Réponses: 5
    Dernier message: 04/06/2004, 13h26
  3. [langage] probleme avec les listes dans des listes
    Par pqmoltonel dans le forum Langage
    Réponses: 7
    Dernier message: 27/04/2004, 12h32
  4. Problem avec les *.AVI sur les panels
    Par NaDiA_SoFt dans le forum C++Builder
    Réponses: 3
    Dernier message: 31/08/2003, 22h50
  5. probleme avec les processus
    Par saidi dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 05/02/2003, 00h18

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