IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Problème dans la numérotation lignes d'un fiichier


Sujet :

C

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2016
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Problème dans la numérotation lignes d'un fiichier
    Bonjour,

    Je cherche à créer un programme qui numérote les lignes d'un fichier donné en ligne de commande seulement mon programme ne fonctionne pas et je n'en trouves pas la cause..
    J'aimerais donc savoir si vous pourriez m'apporter votre aide.

    Merci d'avance.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      int n = 1;
      int c = getc(f);
     
      while ( c != EOF ) {
          if ( c == '\n' ) {
              printf("%d\t%d\n", n, c);
              ++n;
          }
          return c;
      }

  2. #2
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    As-tu tracé (à la main ou mentalement) l'exécution du code et la valeur de chaque variable ? Le code est court, tu devrais vite t'être aperçue du souci.

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2016
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Bien sur , je n'ai pas noté tout le code, il y a la procédure d'ouverture du fichier, et le message d'erreur si jamais le fichier lu en entrée est vide ..
    J'ai tenté de le faire mentalement et ca me semblait correcte d'où la demande d'aide .

    En effet, sauf erreur de ma part, le programme parcours le texte à l'aide de getc, dès qu'il rencontre un retour à la ligne, il numérote la ligne sinon il affiche le caractère lu.

  4. #4
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    Citation Envoyé par AllyM Voir le message
    le programme parcours le texte à l'aide de getc, dès qu'il rencontre un retour à la ligne, il numérote la ligne sinon il affiche le caractère lu
    Le code publié ne parcours pas le texte mais lit uniquement le premier caractère, il n'affiche le caractère lu que si c'est une fin de ligne, et sort tout de suite dans tous les cas.
    ɹǝsn *sıɹɐlos*

  5. #5
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2016
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
       int n = 1;
      char ligne[];
     
      while ( fgets(ligne, sizeof(ligne), f) != NULL ) { //fgets lit chaque ligne
           fseek(f, 0);  // curseur se déplace au début de la ligne
           printf("%d\t", n); 
           fputs(ligne, sizeof(ligne), f); // recopie la ligne lu par fgets
           ++n;
      }

    Je penses que le plus judicieux est d' utiliser fgets, fseek et fputs mais je ne comprends pas bien comment fonctionne ces fonctions.. J'ai modifié le code mais il ne fonctionne toujours pas.

  6. #6
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Les fonctions de lecture modifient leur descripteur, tu n'as pas à faire de seek pour avancer le curseur c'est automatique. Pose-toi les bonnes questions : quelle est la valeur de sizeof(ligne) selon toi ?

    N'utilises pas d'appels avant d'avoir bien compris leur fonctionnement, à savoir les informations qu'ils te renvoient en fonction des paramètres que tu leur passes, ou la manière dont ils modifient l'état interne du processus associé à ton programme. L'approximation, ça peut marchouiller en Python ou en Java. Pas en C. En conséquence lis-bien les pages de man des fonctions que tu veux utiliser, elles sont souvent accompagnées d'exemples.

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    De plus, fseek() prend trois paramètres (et comporte des restrictions sur les fichiers ouverts en mode texte), et un fseek(f, 0, SEEK_SET) retournera au tout début du fichier, et non le début de la ligne.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. [WD-2010] Problème dans listes numérotées - "redémarrer à a" disparu
    Par Yvette dans le forum Word
    Réponses: 13
    Dernier message: 19/04/2014, 20h38
  2. Réponses: 4
    Dernier message: 19/03/2007, 18h22
  3. Réponses: 3
    Dernier message: 16/08/2006, 17h32
  4. Problème de saut de ligne dans un script
    Par AurelBUD dans le forum Langage
    Réponses: 2
    Dernier message: 24/04/2006, 16h25
  5. Problème de suppression de ligne dans ma base !
    Par gregman dans le forum ASP
    Réponses: 2
    Dernier message: 21/05/2005, 08h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo