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 :

Utiliser un fichier grâce à une fonction


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    touristepationné
    Inscrit en
    Janvier 2012
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : touristepationné
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 132
    Par défaut Utiliser un fichier grâce à une fonction
    Bonjour!

    J'apprends le C et j'aimerais lire un fichier ligne par ligne... grâce à une fonction.

    Mon bout de code marche très bien quand je le laisse dans le main et pas du tout quand je le met dans une fonction que j'appelle dans le main.

    La première partie du code écrit dans un fichier 10 chiffres par lignes jusqu'à N et ferme le fichier.

    La 2eme partie (ma fonction qui marche pas) est censé lire les lignes du fichiers une par une et les afficher en retournant le nombre de ligne lues.

    Voici le code raté:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    #include <stdio.h>
     
    unsigned int N ()
    {
      unsigned int n;
      printf ("Veuillez saisir le nombre de chiffre a afficher:\n");
      scanf ("%u",&n);
      printf("Vous avez saisi %u\n",n);
      return n;
    }
     
    void Aff( unsigned int nb, FILE * fichierTemp)
    {
      unsigned int i;
      int dec;
     
      // gère la largeur du tableau en adaptant le nombre de caracteres affichés grâce a la variable dec
      if (nb>10000) dec=5;
      else if (nb>1000) dec=4;
      else if (nb>100) dec=3;
      else if (nb>10) dec=2;
      else if (nb>1) dec=1;
      else dec=0;
     
      // boucle d'affichage
      for (i=0; i<nb;i++)
      {
        fprintf (fichierTemp,"%*u",dec,i+1);
        if ((i+1)%10==0) fprintf (fichierTemp,"\n");
        else fprintf (fichierTemp,"; ");
      }
    }
     
    // fonction qui affiche les lignes du fichier une par une et retourne le nombre de lignes
    int afficheLignesParLignes(char ligne [], int nbCaracteres,char nomFichier[])
    {
     int nbLignes=0;
     
      /*Ouverture du nouveau fichier en lecture*/
      FILE * FICHIER;
      FICHIER = fopen(nomFichier, "w");
     
     while (fgets(ligne,nbCaracteres,FICHIER) !=  NULL)
      {
        printf("%s\n",ligne);
        nbLignes++;
      }
     return nbLignes;
    }
     
    main()
     
    {
     
       // Declaration
      char NomFichier[]= "nombre.txt", mode = 'r';
      char test[10000];
      int nb;
     
      // Pointeur de réf
      FILE * FICHIER;
     
      /*Ouverture du nouveau fichier en ecriture*/
      FICHIER = fopen(NomFichier, "w");
     
      //Programme
      Aff(N(),FICHIER);
     
      fclose (FICHIER);
     
      nb=afficheLignesParLignes(afficheLignesParLignes,9999,NomFichier);
      printf ("%d\n",nb);
     
    }
    Je suis débutant, merci de détailler un peu vos réponses, et d'être indulgeant devant cette erreur basique...

    Merci par avance!

  2. #2
    Membre Expert
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Par défaut
    Bonjour,

    Pourquoi tu ouvres ton fichier en mode écriture ("w") pour lire le fichier ?

    Ça devrait mieux marcher avec le mode lecture ("r") à mon avis

  3. #3
    Membre très actif
    Homme Profil pro
    touristepationné
    Inscrit en
    Janvier 2012
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : touristepationné
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 132
    Par défaut
    Bien vu! Une erreur en faisant un copié coller pour trouver une solution.

    Mettre r ou w change rien a mon probleme c'est un ennuie pour dire quel fichier lire. Une histoire de pointeur:

    Ligne 71
    passing argument 1 of 'afficherLignesParLignes' from incompatibles pointeurs types [enable by default]

    Ligne 35
    note: exepted 'char *' but argument is of type 'int (*) (char *, int, char *)'

  4. #4
    Membre Expert
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Par défaut
    En fait (j'avais pas vu) tu mets le nom de la fonction (qu'il considère du coup comme un pointeur de fonction) à la place d'un tableau de lignes qui est demandé en paramètre.

    D'ailleurs t'as pas besoin de ce paramètre-là, t'as juste à déclarer ton tableau à l'intérieur de ta fonction affichageLignesParLignes

  5. #5
    Membre très actif
    Homme Profil pro
    touristepationné
    Inscrit en
    Janvier 2012
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : touristepationné
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 132
    Par défaut
    Je comprends de travers... un tableau de lignes??? Ou? Je voulais un tableau de caracteres pour y mettre la chaine du nom du fichier.


    Oulà! j'ai trouvé une erreur!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nb=afficheLignesParLignes(afficheLignesParLignes,9999,NomFichier);
    a remplacer par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nb=afficheLignesParLignes(test,9999,NomFichier);
    Une erreur de segmentation à trouver maintenant. (j'ai supprimer le dernier parametre, et declaré:
    dans ma fonction

  6. #6
    Membre Expert
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Par défaut
    Euh, oui tableau de caractères, désolé

    Sinon t'as pas besoin de le demander en paramètre, tu peux le déclarer à l'intérieur de ta fonction (vu que tu t'en sers pas dans le main, pas besoin de passer un tableau depuis le main )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utiliser un fichier dans une sous-fonction
    Par Invité dans le forum C#
    Réponses: 6
    Dernier message: 12/03/2013, 15h15
  2. Ouverture d'un fichier par une fonction.
    Par Pragmateek dans le forum GTK+ avec C & C++
    Réponses: 17
    Dernier message: 26/06/2006, 11h29
  3. Réponses: 7
    Dernier message: 30/05/2006, 11h09
  4. utilisation de getdate() dans une fonction ?
    Par devdev dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 08/03/2005, 17h40
  5. Utilisation de Getdate dans une fonction
    Par BaronSamdi dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 16/11/2004, 10h12

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