[C] problème avec la fonction fwrite(...)

problème avec la fonction fwrite(...) [C] - C++ - Programmation

Marsh Posté le 30-12-2002 à 18:37:18    

jsé pa pkoi mais voilà ce qu'écrit ma fct fwrite(...) dans le fichier "poly2.txt": (le but est d'écrire les coordonnées des points constituant le polygone dans un fichier .txt)
        
 
         
        
        
        
        
        
 
(des sortes de zero tout ptit) au lieu de :
 
1 2
10 12
3 4
8 9
4 2
3 8
7 1
 
alors qu'en debuggant pas a pas, mes variables "mon_poly->p_point[i].x" et "mon_poly->p_point[i].y" sont juste et prenne bien a chaque fois une valeur (1 et 2 respectivement pour la 1ere ligne)...pkoi elles ne sécrivent pas ds mon fichier poly2.txt ?  :??:  

Code :
  1. void ecriture(polygone *mon_poly, int nb_points)
  2. {
  3. int i;
  4. char sep[1];
  5. int tampon[1];
  6. FILE *fd;
  7. fd = fopen("poly2.txt", "w" );
  8. for(i=0;i<nb_points;i++)
  9. {
  10.  tampon[0] = mon_poly->p_point[i].x;
  11.  fwrite((int*)tampon, sizeof(int), 1, fd);
  12.  printf("point[i].x = %d\n", mon_poly->p_point[i].x);
  13.  sep[0] = ' ';
  14.  fwrite((char*)sep, sizeof(char), 1, fd);
  15.  tampon[0] = mon_poly->p_point[i].y;
  16.  fwrite((int*)tampon, sizeof(int), 1, fd);
  17.  printf("point[i].y = %d\n", mon_poly->p_point[i].y);
  18.  sep[0] = '\n';
  19.  fwrite((char*)sep, sizeof(char), 1, fd);
  20. }
  21. fclose(fd);
  22. return;
  23. }

Reply

Marsh Posté le 30-12-2002 à 18:37:18   

Reply

Marsh Posté le 30-12-2002 à 18:46:00    

pq tu fais des casts dans tes fwrite?  :??:

Reply

Marsh Posté le 30-12-2002 à 18:51:43    

Ca te dirais pas d'utiliser plustot fprintf ? fwrite c'est pour les ecritures binaires en general.

Reply

Marsh Posté le 30-12-2002 à 19:24:19    

SirJeannot a écrit :

pq tu fais des casts dans tes fwrite?  :??:  


 
ben j'ai essaié avec et sans :/ ... le 1er argument et d'après le prototype un "const void*" dc j'ai casté, mais c vrai que c inutil mais c t pour testé...et kedalle  :sweat:

Reply

Marsh Posté le 30-12-2002 à 19:33:43    

Kristoph a écrit :

Ca te dirais pas d'utiliser plustot fprintf ? fwrite c'est pour les ecritures binaires en general.


 
tout a fait  :jap:  
Merci !
 
...mais pkoi fwrite ne fait pas, j'aimerais bien savoir :/, c bien son but d'écrire ds un fichier :/

Reply

Marsh Posté le 30-12-2002 à 20:10:44    

oui il ecrit bien dans ton fichier et il fait exactement ce qu'il est cense faire.
 
le seul probleme c'est que tu devrais.. commencer par apprendre le b.a.ba du langage C
 
Je te recommande "le langage C" par Kernighan et Ritchie
c'est un livre assez court et qui te permettra d'apprehender rapidement tous ces concepts sans (trop) te prendre la tete et te decourager..
 
LeGreg


---------------
voxel terrain render engine | animation mentor
Reply

Marsh Posté le 30-12-2002 à 20:13:57    

legreg a écrit :

oui il ecrit bien dans ton fichier et il fait exactement ce qu'il est cense faire.
 
le seul probleme c'est que tu devrais.. commencer par apprendre le b.a.ba du langage C
Je te recommande "le langage C" par Kernighan et Ritchie
c'est un livre assez court et qui te permettra d'apprehender rapidement tous ces concepts sans (trop) te prendre la tete et te decourager..
 
LeGreg


 
 [:schumacher] tai un comique toi...comme si on ne comprenais pas comment marche une fonction fodrai rapprendre le language a zero !  :lol:  
...jvoulais juste des explications sur comment marche cette fonction, le language C jle connais très bien :)

Reply

Marsh Posté le 30-12-2002 à 20:49:26    

Giz a écrit :


le language C jle connais très bien :)


 
ca s'est vu..
 
LeGreg


---------------
voxel terrain render engine | animation mentor
Reply

Marsh Posté le 31-12-2002 à 15:53:33    

Un peu d'aide quand meme pour ne pas reapprendre tout le langage :
(meme si une mise a jour s'impose surement  :D  )
 
fwrite fait des ecritures 'binaires' : tu lui demandes d'ecrire 1 dans un fichier, il ecrit un octet avec la valeur binaire 1.
Et 1 en ascii, ca ne represente rien d'affichable ...
 
Si par contre tu veux ecrire la representation du chiffre 1, fwrite doit ecrire la valeur ascii de 1, c'est a dire 31 en decimal.
 
Et c'est bien pour ca qu'on t'a conseille d'utiliser des fprintf
avec un format %d pour ecrire des int, plutot que de t'embeter
avec fwrite.
 
Bon courage  :sol:  

Reply

Marsh Posté le 31-12-2002 à 17:35:44    

Giz a écrit :


 
 [:schumacher] tai un comique toi...comme si on ne comprenais pas comment marche une fonction fodrai rapprendre le language a zero !  :lol:  
...jvoulais juste des explications sur comment marche cette fonction, le language C jle connais très bien :)


 
faut savoir rester modeste, sinon on perd pas mal de crédibilité, surtout quand on se vante de connaitre tres bien le C alors qu'on arrive pas a utiliser les fonctions les plus banales de ce langage (fwrite/fprintf)
 
Sinon, a coté de ca, pour savoir comment marche une fonction tu as l'arsenal msdn/man/google....

Reply

Marsh Posté le 31-12-2002 à 17:35:44   

Reply

Marsh Posté le 31-12-2002 à 18:02:14    

SVP ne me demander de :

Citation :

commencer par apprendre le b.a.ba du langage C  
 
Je te recommande "le langage C" par Kernighan et Ritchie  
c'est un livre assez court et qui te permettra d'apprehender rapidement tous ces concepts sans (trop) te prendre la tete et te decourager..  


 
juste pr info,  
avec le fprinf on specifie le format %d ce qui fait en effet risque de mieux marcher meme si je l'ai jamais utiliser :)
avec le fwrite si giz mettait  
 

Code :
  1. fd = fopen("poly2.txt", "wt" );


 
je me souviens plus trop si par defaut c en mode txt ou binaire si l'on met rien comme mode d'ecriture  

Reply

Marsh Posté le 31-12-2002 à 18:22:32    

Le mode d'écriture dans un fichier n'a rien a voir avec ça. fwrite ou fprintf font toutes les 2 la même choses. Elles envoient dans le fichiers des octets les uns après les autres et un fichier n'est rien d'autre qu'une suite d'octets !
 
Dans le cas de fwrite vu au début

Code :
  1. fwrite((int*)tampon, sizeof(int), 1, fd);


 
On écrit dans le fichier les octets 0x01, 0x00, 0x00, 0x00
Dans le cas de

Code :
  1. fprintf(fd, "%d", tampon);


 
On écrit dans le fichier les octets 0x31, \n
 
La difference ascii/binaire n'a aucun effet sous Unix. Sous Windows par contre, en mode ascii, le système intercepte les caractères \n pour mettre à la place les 2 caractères \r\n dans le fichier à l'écriture et vice versa à la lecture. Note : je ne me rappelle plus exactement de quel caractères il s'agit.
 
C'est dur à comprendre ? C'est pas la faute aux Unix qui n'en on rien à battre de la difference ascii/binaire mais plustot la faute au DOS dans ce cas :D

Reply

Marsh Posté le 31-12-2002 à 22:18:00    

qu'est-ce qu'il y a de mal a devoir lire un bouquin?
 
Est-ce une tendance generale a fuire tout ce qui
ressemble a une source possible d'amelioration?
 
en plus celui-la il est vraiment bien fait.
Et je l'ai lu alors que j'avais DEJA appris
le C a l'ecole et j'ai encore appris des choses..
 
Et une fois que le C (ou le C++)
ne te pose plus de probleme tu peux
VRAIMENT passer a autre chose.
 
LeGreg


---------------
voxel terrain render engine | animation mentor
Reply

Marsh Posté le 31-12-2002 à 22:25:17    

Citation :

C'est dur à comprendre ? C'est pas la faute aux Unix qui n'en on rien à battre de la difference ascii/binaire mais plustot la faute au DOS dans ce cas :D


 
tu oublies les protocoles reseaux qui n'en ont pas rien a battre.
(exemple http finit toutes ses lignes par "\r\n" )
 
LeGreg


Message édité par LeGreg le 31-12-2002 à 22:26:27

---------------
voxel terrain render engine | animation mentor
Reply

Marsh Posté le 31-12-2002 à 22:29:16    

legreg a écrit :

qu'est-ce qu'il y a de mal a devoir lire un bouquin?
 
Est-ce une tendance generale a fuire tout ce qui
ressemble a une source possible d'amelioration?
 
en plus celui-la il est vraiment bien fait.
Et je l'ai lu alors que j'avais DEJA appris
le C a l'ecole et j'ai encore appris des choses..
 
Et une fois que le C (ou le C++)
ne te pose plus de probleme tu peux
VRAIMENT passer a autre chose.
 
LeGreg


alors tu passes a koi chef  :jap:  
au c# ???

Reply

Marsh Posté le 31-12-2002 à 22:33:28    

weed a écrit :


alors tu passes a koi chef  :jap:  
au c# ???


 
mais non a ecrire des programmes qui marchent boudiou!
 
Si tu ecris un programme et qu'il marchote ou qu'il plante aleatoirement parce que tu ne comprends pas la moitie
de ce que tu as fait, ca veut dire qu'il faut encore s'ameliorer.
 
LeGreg


---------------
voxel terrain render engine | animation mentor
Reply

Marsh Posté le 02-01-2003 à 01:36:18    

C'est l'étape où l'on en sait juste asser pour être dangereux...


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Sujets relatifs:

Leave a Replay

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