Programme en c pour la commande nl

Fermé
waldner77 Messages postés 183 Date d'inscription mercredi 3 juin 2009 Statut Membre Dernière intervention 20 janvier 2011 - 11 sept. 2009 à 13:31
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 11 sept. 2009 à 14:00
Bonjour,
j'ai réaliser un programme en langage si qui fait la commande nl mais le soucie c'est qu'il inscrit les chiffres au niveau d'une ligne qui ne comporte pas de caractère voici mon code:

#include <stdio.h>
#include <stdlib.h>



/* cat : concatene des fichiers, version 1 */
int main(int argc, char *argv[])
{
FILE *fp;
void copierfich(FILE *, FILE *);

if (argc == 1) /* pas d'args : copie l'entree standard */
copierfich(stdin, stdout);
else
while (--argc > 0)
if ((fp = fopen(*++argv, "r")) == NULL) {
printf("cat : impossible d'ouvrir %s\n", *argv);
return 1;
} else {
copierfich(fp, stdout);
fclose(fp);
}
return 0;
}

/* copierfich : copie le fichier fpe dans le fichier fps */
void copierfich(FILE *fpe, FILE *fps)
{

char c ;
short ligne = 0;
int deb =1;

while ((c = getc(fpe)) != EOF){
if(deb){

printf("%6d ",++ligne);
deb = 0;

}
putchar(c);
if( c == '\n'){ deb = 1;}


}
putchar(EOF);
}
A voir également:

1 réponse

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
11 sept. 2009 à 14:00
Salut,

Je n'ai faut que reprendre ton code. En gras les mofifications
#include <stdio.h>
#include <stdlib.h>

void copierfich(FILE *, FILE *);

/* cat : concatene des fichiers, version 1 */
int main(int argc, char *argv[])
{
  FILE *fp;

  if (argc == 1) /* pas d'args : copie l'entree standard */
    copierfich(stdin, stdout);
  else
    while (--argc > 0)
      if ((fp = fopen(*++argv, "r")) == NULL) {
        printf("cat : impossible d'ouvrir %s\n", *argv);
        return 1;
      } else {
          copierfich(fp, stdout);
          fclose(fp);
      }
  return 0;
}

/* copierfich : copie le fichier fpe dans le fichier fps */
void copierfich(FILE *fpe, FILE *fps){

  char c ;
  short ligne = 0;
  int deb =1;
  int nbc=0;
  while ((c = getc(fpe)) != EOF){
    ++nbc;
    if(nbc==1 && c=='\n')
      ;
    else
      if(deb){
        printf("%6d ",++ligne);
        deb = 0;
      }
    putchar(c);
    if( c == '\n'){ deb = 1;nbc=0;}
  }
//putchar(EOF);
}




0