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:
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:
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);
} |
Citation:
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
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:
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...
Re: fstream >> probleme avec les entiers
remplace
Code:
1 2 3 4
|
sParticules = new sysParticules*[nbrSysParticules];
for(int i = 0; i < nbrSysParticules; i++)
sParticules[i]->charger(fichier); |
par
Code:
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