Previous Next Up Index Contents

Exercice 11.11

#include <stdio.h>

main()
{
  /* Déclarations : */
  /* Noms des fichiers et pointeurs de référence */
  char ANCIEN[30], NOUVEAU[30]; 
  FILE *INFILE, *OUTFILE;
  /* Autres variables */
  char C; /* caractère lu dans le fichier */
  char N_RET; /* Compteur des retours à la ligne consécutifs */
 
  /* Ouverture de l'ancien fichier en lecture */
  do
    {
     printf("Nom du fichier source : ");
     scanf("%s", ANCIEN);
     INFILE = fopen(ANCIEN, "r"); 
     if (!INFILE) 
         printf("\aERREUR: Impossible d'ouvrir "
                "le fichier: %s.\n", ANCIEN);
    }
  while (!INFILE);
   /* Ouverture du nouveau fichier en écriture */
  do
    {
     printf("Nom du nouveau fichier : ");
     scanf("%s", NOUVEAU);
     OUTFILE = fopen(NOUVEAU, "w"); 
     if (!OUTFILE) 
         printf("\aERREUR: Impossible d'ouvrir "
                "le fichier: %s.\n", NOUVEAU);
    }
  while (!OUTFILE);
 

  /* Copier tous les caractères et remplacer le */
  /* premier retour à la ligne d'une suite par  */
  /* un espace. */ 
  N_RET=0;
  while (!feof(INFILE))
    {
     C=fgetc(INFILE);
     if (!feof(INFILE))
        {
         if (C == '\n')
            {
             N_RET++;
             if (N_RET > 1)
                fputc('\n', OUTFILE);
             else
                fputc(' ', OUTFILE);
            }
         else
            {
             N_RET=0; 
             fputc(C, OUTFILE);
            }
        }
    }
   /* Fermeture des fichiers */
  fclose(OUTFILE);
  fclose(INFILE);
   return 0;
} 

Remarque :

Après la lecture par fgetc, il faut s'assurer encore une fois que le caractère lu est différent de EOF. Nous obtenons ainsi une construction un peu lourde:

   while (!feof(INFILE))
     {
      C=fgetc(INFILE);
      if (!feof(INFILE))
         {
          . . .
         }
     }

Il est possible de réunir plusieurs instructions dans le bloc conditionnel de la structure while, en les séparant par des virgules. En pratique, on retrouve cette solution souvent pour éviter des constructions inutilement lourdes:

   while (C=fgetc(INFILE), !feof(INFILE))
     {
          . . .
     }


Previous Next Up Index Contents

Feedback - Copyright © 1993,1996,1997 F.Faber