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".
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.
// 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";
}
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.
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;
}
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
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.