Pb de lecture de fichier "3D"

Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 - 1 août 2004 à 22:57
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 - 12 août 2004 à 16:34
Bonjour tout le monde!
J'ai le problème suivant:
je veux lire le fichier ci_dessous (entre les "-->", qui ne sont bien sûr pas dans le fichier), enregistré sous rouespos.txt .
voiture1,2,3,4 sont ... les noms des voitures (NAN ,sans dec'?)
les gros nombres sont les positions des 4 roues (XYZ), enregistrés en "double".

-->
voiture1
-29.50146441626099 18.77827301898406 7.505237161231101
-29.62943515514049 -18.44497884869858 7.505237161232468
32.62494709028103 -18.65900473023005 9.578808018798741
32.75291782916099 18.56424713745291 9.578808018797645

voiture2
-28.29060363033297 -19.1202535946866 9.129186596620253
-28.25809522021725 19.38137438296277 9.129186596621565
37.2135171934093 19.01725736610241 9.582248899336967
37.18126954594147 -19.17553402349085 9.582248899336028

voiture3
-34.3334998457147 18.71550390740256 9.266100402719975
-34.33349984571208 -18.71550390740478 9.266100402719644
31.81370608027729 -18.71550390740045 8.404245674979457
31.8137060802751 18.71550390740647 8.404245674979627

voiture4
-43.79599622370735 19.91996490954331 8.550955486743886
-43.79599622370741 -19.91996773702908 8.550955486744924
47.46255303554648 -19.91996773702878 7.849600747760739
47.46255303554621 19.91996490954339 7.849600747760821
-->

Du coup j'ai fait ce prog de lecture (cf plus bas), mais ca marche pas!!!
Je suppose que c'est encore une erreur toute con, mais j'y ai déja passé un nombre d'heures conséquent et ça m'énerve.
HELP ME PLEASE!!
Merci bcp d'avance.

PS: pour une lecture plus facile, mieux vaut faire copier-coller dans le notepad, les lignes sont un peu longues.

#include <windows.h>
#include <stdio.h>
#include <mbstring.h>
#include
int main(int argc, char* argv[])
{

typedef struct roues_params{
double NormalPos[3];
} roues_params;

typedef struct struct_cars_params {
roues_params roue[4];
} cars_params;
cars_params Originalcar[10];

FILE *rouepos;
rouepos=fopen("rouespos.txt","r");

// char carname[50];
for (int a=0;a<4;a++)
{
fscanf(rouepos,"%d%d%d\n%d%d%d\n%d%d%d\n%d%d%d\n\n ", &Originalcar[a].roue[0].NormalPos[0],&Originalcar[a].roue[0].NormalPos[1],&Originalcar[a].roue[0].NormalPos[2],
&Originalcar[a].roue[1].NormalPos[0],&Originalcar[a].roue[1].NormalPos[1],&Originalcar[a].roue[1].NormalPos[2],
&Originalcar[a].roue[2].NormalPos[0],&Originalcar[a].roue[2].NormalPos[1],&Originalcar[a].roue[2].NormalPos[2],
&Originalcar[a].roue[3].NormalPos[0],&Originalcar[a].roue[3].NormalPos[1],&Originalcar[a].roue[3].NormalPos[2]);

// vérification de certaines valeur, juste pour voir si ca a marché
cout << a<<":\n"<< Originalcar[a].roue[0].NormalPos[0] <<"\t"<< Originalcar[a].roue[0].NormalPos[1]<<"\t"<<Originalcar[a].roue[0].NormalPos[2]<<"\n\n";
}

// suite du prog
return 0;
}

4 réponses

cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
2 août 2004 à 01:22
La methode du fscanf, je trouve ca pas tres propre, mais en tt kas, tu veux recup des nombres flottants alors pkoi tu passes %d a fscanf ?? %d =>> Nombres entiers int, met %f.

++

Bonne nuit
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
2 août 2004 à 11:05
Oulalala mais c'est du bordel !

AlexMan> Pour récuperer un double c'est %lf (long float) et pour un float c'est %f !!!

Arnaud16022> J'ai corrigé ton programme car il y avait un certains nombre d'erreur. Regarde tes structures elles sont plutot bizarres non ?
Pas besoin de tout ce chararbia pour definir des sous-structures.
Sinon j'ai aussi modifier la syntaxe de ton fichier.
J'ai separé les valeurs par des tabulations a la place des espaces. C'est plus lisible.
Mais tu peux tres bien remettre les espaces et modifier les "\t" par des espaces.

Donne des noms explicite a tes variables pour une compréhension plus facile.
Et pas besoin d'unclure 36 bibliothèques. Avec une seule ce que tu veux faire va très bien!

Bref, je vais pas te lister toute les erreurs. Compares ton code au miens tu les verras toi meme:

#include <stdio.h>

typedef struct {
double	x;
double	y;
double	z;
}ROUES;

typedef struct {
ROUES	NumRoues[4];
char	Marque[256];
} VOITURE;

int main(int argc, char* argv[])
{
FILE*	fpVoiture;
VOITURE V[4];

// On ouvre le fichier en lecture et mode texte
fpVoiture = fopen("d:\\rouespos.txt","r+t");

//Les valeurs sont récuperés par syntaxe(i.e: MARQUE\nROUES.POS.X\tROUES.POS.Y\tROUES.POS.Z\n\n)
for(int i=0;i<4;i++)
{
fscanf(fpVoiture,"%s\n%lf\t%lf\t%lf\n%lf\t%lf\t%lf\n%lf\t%lf\t%lf\n%lf\t%lf\t%lf\n\n",&V[i].Marque,&V[i].NumRoues[0].x, &V[i].NumRoues[0].y, &V[i].NumRoues[0].z,
   &V[i].NumRoues[1].x, &V[i].NumRoues[1].y, &V[i].NumRoues[1].z,
   &V[i].NumRoues[2].x, &V[i].NumRoues[2].y, &V[i].NumRoues[2].z,
   &V[i].NumRoues[3].x, &V[i].NumRoues[3].y, &V[i].NumRoues[3].z);						  							 					    
}

//Pour bonne verification, on affiche les 6 premieres décimales de chaque premiere nombre de la premiere ligne
for(i=0;i<4;i++)
{
printf("%s\n%0.6f\t%0.6f\t%0.6f\n\n",V[i].Marque,V[i].NumRoues[0].x,V[i].NumRoues[0].y,V[i].NumRoues[0].z);
}

return 0;
}


A++ et bonne continuation.

Shell
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
2 août 2004 à 23:37
c'est bien mieux comme ca, trop crade ton truc Arnaud16022, et passe en binaire, ca cimplifira la lecture et l'ecriture dans le fichier et pas de perte de precision

fread( V, sizeof V[0] * sizeof V, 1, fpVoiture);
0
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
12 août 2004 à 16:34
cOOOl

Merci bcp

La lecture/ecriture de fichiers, cŽest un des trucs qui m'embete le plus... et ca se voit...

je ne veux pas encore passer en binaire, parce que ces valeurs , je veux pouvoir les modifier manuellement,sans etre obligé de passer par un autre prog;

sinon les 2 classes c'etait fait exprès (je les ai TRES simplifiées pour poser la question)

Et desole pour le temps de reponse,mais je suis un peu con sur les bords, j'ai pose ma question 2 heures avant de partir en vacances en Autriche, que j'ai mis une semaine pour trouver un cafe internet (c'est un trou perdu au fond de la montagne...)

Merci encore

Je verrai ca dans une semaine ;)

Ciao

PS: c'etait gentil de me corriger la fonction d'affichage mais je l'ai fait a la nimp; juste pour montrer que ca marchait pas.

PS2: je hais ces claviers qwertz !
0
Rejoignez-nous