Compter le nombre des ligne d'une fichier en c

Messages postés
17
Date d'inscription
mardi 30 septembre 2014
Statut
Membre
Dernière intervention
21 janvier 2015
-
Bonjour mes amis,
j'essaye de faire un programme qui retourne les nombre des ligne de mon fichier txt :
//*
nom
1
2
3
prenom
adresse
*//

alors que le nombre des ligne que je besoin est les nombre des ligne contient les entiers(3 ligne),j'essaye avec ce code ici mais il ne retourne pas le nombre que j'ai besoin :
while(!feof(f))
    {
     fscanf(f,"%s",&ch);
    if (strcmp(ch,"bonjour")!=0)
    {
             if ((fgetc(f)=='\n')&&(strcmp(ch1,"ok")==0))
        {
            nb++;
        }
    }
    }


j'attend vos aides et vos propositions,et merci :)
Afficher la suite 

7 réponses

Messages postés
14574
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
30 octobre 2019
136
Commenter la réponse de NHenry
Messages postés
5340
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
3 septembre 2019
87
0
Merci
Salut,

Pour lire ton fichier ligne par ligne, tu peux utiliser la fonction 'getline':

#include <stdio.h>  // FILE, fopen etc..
#include <stdlib.h> // free+EXIT_XXXX
#include <string.h> // pour strerror
#include <errno.h> // pour errno

int main(int argc, char** argv) {
  FILE* file = NULL;
  char* buffer = NULL;
  size_t length = 0, lines = 0;
  
  if(argc < 2) {
    fprintf(stderr, "Invalid file name.\n%s <filename>\n", argv[0]);
    return EXIT_FAILURE;
  }

  /* ouverture du fichier */
  file = fopen(argv[1], "r");
  if(!file) {
    fprintf(stderr, "Open: (%d) %s\n", errno, strerror(errno));
    return EXIT_FAILURE;    
  }
  
  /* lecture ligne par ligne et comptage des lignes */
  while (getline(&buffer, &length, file) != -1) ++lines;
  /* libération du buffer alloué par getline */
  if(buffer) free(buffer);
  /* fermeture du fichier */
  fclose(file);

  /* affichage du nombre de lignes */
  printf("The file %s contains %zu lines.\n", argv[1], lines);

  return EXIT_SUCCESS;
}

Commenter la réponse de Twinuts
0
Merci
merci pour votre reponse,mais je travaille avec la langage C pas C++ et pour getline est utilisée en C++ !!
Commenter la réponse de mansouri
Messages postés
26651
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
1 novembre 2019
316
0
Merci
Bonjour,
Et avec
 fgets() 
?

http://www.mrx.net/c/readfunctions.html

.
Commenter la réponse de jordane45
Messages postés
5340
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
3 septembre 2019
87
Commenter la réponse de Twinuts
Messages postés
3821
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 août 2019
90
0
Merci
merci pour votre reponse,mais je travaille avec la langage C pas C++ et pour getline est utilisée en C++ !!


Tu es quand même culotté ! Twinuts t'apporte une solution propre, prête à l'emploi, en C, et toi tu ne la testes même pas, et déclare sa méthode invalide...
Tu n'as visiblement même pas pris le temps de lire ni même de tester ce qu'il te proposait (alors qu'en plus il t'avait commenté le code).

@Twinuts: le "if(buffer)" devant "free(buffer);" n'est pas nécessaire. La fonction free, fait déjà cette vérification. Il est tout à fait correcte de faire un free(NULL). Juste pour pinailler :).

__________________________________________________________________________________________________

Améliorez votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
Commenter la réponse de cptpingu
Messages postés
552
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
26 mars 2016
1
0
Merci
Une librairie écrite en assembleur devrait résoudre le problème.
les protos devront être des stdcall
http://codes-sources.commentcamarche.net/source/100782-manipuler-du-texte-avec-des-numeros-de-lignes


--
Commenter la réponse de ToutEnMasm