fwrite panique ??

fwrite panique ?? - C++ - Programmation

Marsh Posté le 29-03-2003 à 18:26:54    

je travaille sous C++ builder 6, et quand je fais une boucle pour récupérer dans un fichier des données (avec scanf) et que je veux les enregistrer dans un autre avec fwrite, ben les 13 premier marche mais apres il me met toujours le meme nombre (-431602080.000000 pour des float) et (-858993460 pour des entiers), pourtant pensant devenir fou, j'écris dans un troisieme fichiers les memes variables avec fprintf et la j'obtient bien les memes données...
 
C'est bizarre.. c'est deja arrivé a quelqu'un, parce que la je m'arrache les cheveux...
 
 
 
un exemple d'une boucle de récupération :
 

Code :
  1. for(int i = 0;i < Nb_Vertex;i++)
  2.         {
  3.  if(!positionne(F,"*MESH_VERTEX " )) err("chargement MESH_VERTEX" );
  4.  fscanf(F,"%d %f %f %f ",&temp,&VertexX,&VertexY,&VertexZ);
  5.                 fwrite(&VertexX,4,1,G); fprintf(D,"%f ",flt);
  6.                 fwrite(&VertexY,4,1,G); fprintf(D,"%f ",flt);
  7.                 fwrite(&VertexZ,4,1,G); fprintf(D,"%f ",flt);
  8.                                         fprintf(D,"\n" );
  9.         }

Reply

Marsh Posté le 29-03-2003 à 18:26:54   

Reply

Marsh Posté le 29-03-2003 à 18:51:20    

1) est que ton fscanf réussit
2) tes utilisations de fwrite sont criticable. utilise sizeof monVertex plutot que 4, c'est plus lsible et c'est une bonne habitude.
 
sinon je ne vois aps de problème. dans D, tu as la représeantion textuelle des tes données, dans G, la représenation binaire

Reply

Marsh Posté le 29-03-2003 à 21:26:18    

Comment tu l'ouvres ton fichier?
Je veux dire, quels sont les paramètres que tu donnes à fopen.
Moi je m'étais fait avoir avec fopen("monfichier.dat", "r" ) alors qu'en fait il fallait faire fopen("monfichier.dat", "rb" ). (b pour binary). En mode texte ( =pas binaire ) il y a une conversion au niveau des retours à la ligne à l'écriture et à la lecture.

Reply

Marsh Posté le 29-03-2003 à 22:01:31    

Je me suis trompé de code voila le bon :
 

Code :
  1. for(int i = 0;i < Nb_Vertex;i++)
  2.         {
  3.  if(!positionne(F,"*MESH_VERTEX " )) err("chargement MESH_VERTEX" );
  4.  fscanf(F,"%d %f %f %f ",&temp,&VertexX,&VertexY,&VertexZ);
  5.                 fwrite(&VertexX,4,1,G); fprintf(D,"%f ",VertexX);
  6.                 fwrite(&VertexY,4,1,G); fprintf(D,"%f ",VertexY);
  7.                 fwrite(&VertexZ,4,1,G); fprintf(D,"%f ",VertexZ);
  8.                                         fprintf(D,"\n" );
  9.         }


 
En faite VertexX Y ou Z sont des flottants, c'est pour ça que j'ai mis 4 octets.. mais bon c'est vrai qu'un sizeof serait la bien venu...
 

Citation :

1) est que ton fscanf réussit  


 
Oui oui j'en suis sur car mon fprintf m'écris les bonnes valeurs récupérée par mon scanf.
 
 

Citation :

sinon je ne vois aps de problème. dans D, tu as la représeantion textuelle des tes données, dans G, la représenation binaire


 
Ben ouais moi non plus je vois pas, enfin si c'était sur toutes les itérations, mais ce qui est bizarre c'est que je recupere quelques bonnes valeurs, puis c'est la panique....
 
 
 

Citation :

Comment tu l'ouvres ton fichier?


 
F est en "r" pareil que "rt"
D est en "w" comme "wt"
G est en "wb"
 
 
c'est bizarre... je comprends pas...

Reply

Marsh Posté le 29-03-2003 à 22:39:52    

le mode "t" n'est pas standard ni rien du tout. par defaut, le mode st texte. tu peux decrire plus precisément ce qui cloche et tester systématiquement tous les codes de retours pour en savoir un peu plus

Reply

Marsh Posté le 30-03-2003 à 21:56:05    

euh j'ai cherché, j'ai toujours pas trouvé mon erreur, mais est ce que cela serait possible qu'il faille modifier la taille du buffer de mon FILE* ou j'écris/lis, vu qu'il est affecté automatiquement avec fopen, il faut peut etre l'augmenter ou le diminuer ?
 

Reply

Marsh Posté le 30-03-2003 à 22:45:21    

non ca vient pas de là. je comprends pas ton problème. expliques concretement ce que tu obtiens et ce que tu voudrais obtenir

Reply

Marsh Posté le 30-03-2003 à 22:55:42    

c'est bon j'ai resolu, ça vient pas de l'écriture, mais ca vient de ma lecture, j'ouvrais pour lire mon fichier en "r", j'ai changer en "rb" et ça marche nickel, par contre pourquoi ça marchait a moitié en "r", je sais po...
 
merci à toi ++Taz
 
(ptain des fois on cherche une erreur pendant trop de temps alors que c'est une erreur a la con... mais bon ça forge l'expérience)

Reply

Marsh Posté le 30-03-2003 à 23:31:09    

juldjin a écrit :

c'est bon j'ai resolu, ça vient pas de l'écriture, mais ca vient de ma lecture, j'ouvrais pour lire mon fichier en "r", j'ai changer en "rb" et ça marche nickel, par contre pourquoi ça marchait a moitié en "r", je sais po...
 


 
parce que le systeme windaube gère deux sortes de fichiers : les "text" et les "binary". Cela se répercute sur la lib d'E/S de fichiers avec un mode spécial "b", propre à windaube.


Message édité par schnapsmann le 30-03-2003 à 23:31:39

---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 31-03-2003 à 00:49:11    

C'est clair que ce mode b, c'est vraiment la merde ... il devrait être par défaut déjà, ce serait pas un mal ....
 


---------------
last.fm
Reply

Marsh Posté le 31-03-2003 à 00:49:11   

Reply

Marsh Posté le 04-04-2003 à 17:01:47    

juldjin a écrit :

c'est bon j'ai resolu, ça vient pas de l'écriture, mais ca vient de ma lecture, j'ouvrais pour lire mon fichier en "r", j'ai changer en "rb" et ça marche nickel, par contre pourquoi ça marchait a moitié en "r", je sais po...


 
C'est que je t'ai dit dès le début... et y'a l'explication! tu lis une réponse sur deux ou quoi?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed