c encore moi .......... (au risque de gener certaines personnes)

c encore moi .......... (au risque de gener certaines personnes) - C++ - Programmation

Marsh Posté le 20-08-2002 à 16:27:59    

voila j'vous previens si c'est pour me dire que j'suis vraiment trop nul en programmation , spa la peine de venir poster , apsser votre chemin
 
alors pour les autres personnes qui ont la bonne volonté de m'aider , vous etes pret ?????
 
 
 
 
c'est parti , accroché vous ca va décoiffer
 
 

Code :
  1. #include <stdio.h>
  2. char nom1[64]={0},nom2[64]={0},c;
  3. FILE *fichier1,*fichier2;
  4. void lecture(FILE *fichier,char nom[64])
  5. {
  6. if ((fichier = fopen(nom,"r" )) == NULL)
  7.         printf("ERREUR : impossible d'ouvrir le fichier %s .\n",nom);
  8.     else
  9.         printf("Fichier %s ouvert",nom);
  10. }
  11. void ecriture(FILE *fichier,char nom[64])
  12. {
  13. if ((fichier = fopen(nom,"w" )) == NULL)
  14.         printf("ERREUR : impossible d'ouvrir le fichier %s .\n",nom);
  15.     else
  16.         printf("Fichier %s ouvert",nom);
  17. }         
  18.        
  19.    
  20.          
  21. main()
  22. {
  23.     printf("Entrez le nom du fichier source :\n" );
  24.     scanf("%s",nom1);
  25.     lecture(fichier1,nom1);
  26.    
  27.     printf("Entrez le nom du fichier destination :\n" );
  28.     scanf("%s",nom2);
  29.     ecriture(fichier2,nom2);
  30.    
  31.    
  32.      
  33.    
  34.     while ((c=fgetc(fichier1)) !=';')
  35.         fputc(c,fichier2);
  36.        
  37.     while ((c=fgetc(fichier1)) !=';')
  38.         fputc(c,fichier2);
  39.          
  40. }


 
donc c 'est la partie de lecture / ecriture ki foire depuis que j ai mis les instruction d ouverture de fichier en procedure ....
 
moi pas comprendre pq


Message édité par Lenoiche le 20-08-2002 à 16:41:18
Reply

Marsh Posté le 20-08-2002 à 16:27:59   

Reply

Marsh Posté le 20-08-2002 à 16:36:13    

tu passes le pointeur en paramètre, alors que tu dois passer l'adresse du pointeur, pour que la fonction puisse modifier le contenu de "fichier1" et "fichier2"
cf passage de paramètre dans tout bon cours de C :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 20-08-2002 à 16:36:42    

Pour passer les arguments aux fonctions, il vaut mieux utiliser un pointeur sur la chaîne nom (son nom est symbolique). Le dimensionnement étant fait ailleurs (déclaration au début (char nom1[64]={0},nom2[64]={0};), la mémoire est réservée et initialisée. Attention à ne pas dépasser 63 caractères utiles (le 64ème est le zéro terminal).
 
  void lecture(FILE *fichier, char *nom)    
  void ecriture(FILE *fichier, char *nom)  
 
Pour regarder plus avant, ai pas le temps ce soir.
 
 

Reply

Marsh Posté le 20-08-2002 à 16:37:39    

le prob vient de FILE *
il doit passer FILE **


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 20-08-2002 à 16:39:44    

Et puis je te conseil soit de lire tout une ligne d'un coup soit carrément de lire tout le fichier, c pas top la lecture caractaire par caractaire.


---------------
Le Tyran
Reply

Marsh Posté le 20-08-2002 à 16:46:24    

antp a écrit a écrit :

tu passes le pointeur en paramètre, alors que tu dois passer l'adresse du pointeur, pour que la fonction puisse modifier le contenu de "fichier1" et "fichier2"
cf passage de paramètre dans tout bon cours de C :D




 
alors si j ai bien compris le pb vient du fait que mes fichiers ne sont pas bien ouvert  
c pour ca que ca ne marchais plus lorque que les ai mis en fonction et non en instruction dans le programme principale
 
il faut donc passer l'argument en parametre pour qu'il puisse etre changer , c bien ca ????
 
donc en gros faut faire un double pointeur dur la variable FILE
j ai bien compris monsieur le professeur ????

Reply

Marsh Posté le 20-08-2002 à 16:48:15    

letoII a écrit a écrit :

Et puis je te conseil soit de lire tout une ligne d'un coup soit carrément de lire tout le fichier, c pas top la lecture caractaire par caractaire.




 
le probleme c qu il faut que je prenne des informations tantot dans un fichier , tantot dans l autre .......
 
et les info d'un fichier ne se suive pas forcement , c a dire qu il faut que je prenne un champs d un fichier A , puis un champs d'une fichier B , puis on reviens sur un autre champs du fichier A ....
les champs de ces fichiers sont séparées par des points virgules

Reply

Marsh Posté le 20-08-2002 à 16:48:50    

"argument de paramètre" :heink:
 
faut donner l'adresse de la variable de type "FILE *" pour que la fonction puisse changer, parce que si tu donnes juste la variable elle peut faire tout ce qu'elle veut sauf changer la valeur


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 20-08-2002 à 16:51:54    

lenoiche :hello: ça va?

Reply

Marsh Posté le 20-08-2002 à 17:00:19    

Lenoiche a écrit a écrit :

 
 
alors si j ai bien compris le pb vient du fait que mes fichiers ne sont pas bien ouvert  
c pour ca que ca ne marchais plus lorque que les ai mis en fonction et non en instruction dans le programme principale
 
il faut donc passer l'argument en parametre pour qu'il puisse etre changer , c bien ca ????
 
donc en gros faut faire un double pointeur dur la variable FILE
j ai bien compris monsieur le professeur ????




 
Trouve toi un bon cours de C ;)


---------------
Le Tyran
Reply

Marsh Posté le 20-08-2002 à 17:00:19   

Reply

Marsh Posté le 22-08-2002 à 00:18:30    

1) Eviter les variables globales.
2) On ne peut transmettre un tableau en argument, seulement son adresse. char nom[64] est convertit en char* nom.
3) Il faut transmetttre un pointeur sur FILE*.
4) La série de fonction de fichiers f... gère un tampon interne au programme. Ce n'est pas un problème d'y accéder 1 caractère  à la fois.
5) int main() requiert un return.

Code :
  1. #include <stdio.h>
  2. void lecture(FILE **const fichier,const char *const nom){
  3. if ((fichier = fopen(nom,"r" )) == NULL)
  4.  printf("ERREUR : impossible d'ouvrir le fichier %s .\n",nom);
  5. else
  6.  printf("Fichier %s ouvert",nom);
  7. }
  8. void ecriture(FILE **const fichier,const char *const nom){
  9. if ((fichier = fopen(nom,"w" )) == NULL)
  10.  printf("ERREUR : impossible d'ouvrir le fichier %s .\n",nom);
  11. else
  12.  printf("Fichier %s ouvert",nom); 
  13. }         
  14. int main(){
  15. char nom1[64], nom2[64], c;
  16. FILE *fichier1, *fichier2;
  17. printf("Entrez le nom du fichier source :\n" );
  18. scanf("%s",nom1);
  19. lecture(fichier1,nom1);
  20. printf("Entrez le nom du fichier destination :\n" );
  21. scanf("%s",nom2);
  22. ecriture(fichier2,nom2);
  23. int i ;
  24. for(i= 0; i<2 ; ++i)
  25.  while ((c=fgetc(fichier1)) != ';')
  26.   fputc(c,fichier2);
  27. return 0;
  28. }


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

Marsh Posté le 22-08-2002 à 19:11:33    

Tu devrais peut-être changer le nom de tes fonctions, et les appeler par ex "ouvrir_en_lecture" et "ouvrir_en_ecriture".
Ca rendrait le code plus lisible et c'est une bonne habitude à prendre de donner des noms explicites aux fonctions! :jap:

Reply

Marsh Posté le 23-08-2002 à 02:23:19    

Quel plouc je fais !
Mon code n'était pas correct

Code :
  1. :#include <stdio.h> 
  2.  
  3. void lecture(FILE **const fichier,const char *const nom){ 
  4.   if ((*fichier = fopen(nom,"r" )) == NULL) 
  5.      printf("ERREUR : impossible d'ouvrir le fichier %s .\n",nom); 
  6.   else 
  7.      printf("Fichier %s ouvert",nom); 
  8. void ecriture(FILE **const fichier,const char *const nom){ 
  9.   if ((*fichier = fopen(nom,"w" )) == NULL) 
  10.      printf("ERREUR : impossible d'ouvrir le fichier %s .\n",nom); 
  11.   else 
  12.      printf("Fichier %s ouvert",nom); 
  13. }           
  14. int main(){ 
  15.   char nom1[64], nom2[64], c; 
  16.   FILE *fichier1, *fichier2; 
  17.  
  18.   printf("Entrez le nom du fichier source :\n" ); 
  19.   scanf("%s",nom1); 
  20.   lecture(&fichier1,nom1); 
  21.  
  22.   printf("Entrez le nom du fichier destination :\n" ); 
  23.   scanf("%s",nom2); 
  24.   ecriture(&fichier2,nom2); 
  25.  
  26.  
  27.   int i ;
  28.   for(i= 0; i<2 ; ++i)
  29.    while ((c=fgetc(fichier1)) != ';')
  30.     fputc(c,fichier2); 
  31.   return 0;
  32. }


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

Marsh Posté le 26-08-2002 à 10:16:03    

okay merci les messieurs pour voter aide ki m a ete d un grand secours
 
:jap:

Reply

Sujets relatifs:

Leave a Replay

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