Problème avec mon programme

Problème avec mon programme - C - Programmation

Marsh Posté le 04-01-2016 à 14:55:41    

Bonjour,
 
J'ai un souci avec le résultat de ma fonction, dans mon nouveau fichier seule la première ligne est remplacée par le mot à modifier mais pas les autres lignes du fichier à lire.
Mon fichier à lire contient un mot par ligne.
Voici mon code:
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. int main(int i, char *argv[])
  5. {
  6.   /* Noms des fichiers et pointeurs de référence à rentrer sur la ligne de commande */
  7.   char ligne_lu[512];
  8.   char *mot_a_modifier = argv[1];
  9.   char *nouveau_mot = argv[2];
  10.   char const *ancien_fichier = argv[3];
  11.   char const *nouveau_fichier = argv[4];
  12.   FILE *f_in, *f_out;
  13.   f_in = fopen(ancien_fichier ,"r" );
  14.   f_out = fopen(nouveau_fichier ,"w" );
  15.   /* Ouverture de l'ancien fichier en lecture */
  16.   if (f_in!= NULL)
  17.   {
  18.  
  19.      while (fscanf(f_in, "%s", ligne_lu) > 0) //lecture de lignes
  20.      {
  21.        if (strcmp(ligne_lu, mot_a_modifier) == 0) //quand les deux mots sont identiques
  22.           {
  23.             fprintf(f_out, "%s\n", nouveau_mot); //remplace dans le nouveau fichier
  24.           }
  25.        else
  26.           {
  27.             fprintf(f_out, "%s\n", ligne_lu);
  28.           }
  29.        fclose (f_in);
  30.        fclose (f_out);
  31.      }
  32.   }
  33.   else
  34.   {
  35.       printf ("Erreur d'ouverture du fichier\n" );
  36.   }
  37.   return 0;
  38. }


     
 
Merci d'avance pour l'aide.

Reply

Marsh Posté le 04-01-2016 à 14:55:41   

Reply

Marsh Posté le 04-01-2016 à 15:08:29    

Tu fermes tes fichiers après le premier passage dans la boucle, autrement dit faut sortir les fclose() de la boucle.
Et tu ne testes pas si f_out est valide.

Reply

Marsh Posté le 04-01-2016 à 15:14:38    

rat de combat a écrit :

Tu fermes tes fichiers après le premier passage dans la boucle, autrement dit faut sortir les fclose() de la boucle.
Et tu ne testes pas si f_out est valide.


 
C'est réglé. Merci beaucoup ;)

Reply

Sujets relatifs:

Leave a Replay

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