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 :

[newbie] fonction fopen et fscanf


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 43
    Par défaut [newbie] fonction fopen et fscanf
    Bonjour,

    J'ai un fichier toto.txt avec 2 lignes.
    Je souhaite récupérer chacune d'elle dans des variables. Le contenu de l'une d'entre-elle doit passer un test de comparaison avec un entier (int test passé en argument). Le fichier est traité dans l'appel d'une fonction (lecture_fichier). Si le test est validé, un retour doit être transmis au code principal.

    Voici un premier jet :

    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
     
    void lecture_fichier(int test)
    {
       char *name = "toto.txt";   
       char valeur1[4];
       char valeur2[BUFSIZ];
       FILE *file;
     
       if ((file = fopen ( name, "r" )) == NULL)
       perror ("Impossible d'ouvrir le fichier.");
       else
       {
          while ( fscanf ( file, "%s %s", valeur1, valeur2 ) == 2)
          printf("%s\n%s\n", valeur1, valeur2);
       fclose ( file );
       }
    }
    Mes questions sont les suivantes :

    - je ne sais pas dans quelle mesure l'utilisation de la fonction fscanf est optimale et s'il n'existe pas une solution alternative plus propre ?

    - lors de mon test, je vais avoir un problème de comparaison entre un pointeur et un entier et je ne sais pas comment pallier à ce problème.

    - enfin, comment dois-je intégrer à ma fonction le retour du test qui sera récupérer par le code principal ?

    Merci bien pour votre aide.

  2. #2
    Invité
    Invité(e)
    Par défaut
    T'as sur chaque ligne du fichier deux valeurs séparées par un espace ?
    Si c'est ça, t'es pas obligé de passer par une chaine, tu peux lire directement un entier. En plus comme tu l'as écrit, si tes chaines dépassent 4 ou BUFSIZ en taille, ça va planter.
    Pour le test, tu peux renvoyer en entier 0 si le test est validé. En général on utilise 0 pour signifier un succès, comme ça on peut utiliser toutes les autres valeurs non nulles pour tous les cas d'échec.
    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
    int lecture_fichier(int test)
    {
       char *name = "toto.txt";   
       int valeur1;
       int valeur2;
       FILE *file;
       
       if ((file = fopen ( name, "r" )) == NULL)
      {
       perror ("Impossible d'ouvrir le fichier.");
       return -1;
      }
       else
       {
          while ( fscanf ( file, "%d %d", valeur1, valeur2 ) == 2)
          printf("%d\n%d\n", valeur1, valeur2);
          fclose ( file );
        if(valeur1==test)
          return 0;
        else
          return -1;
       }
    }

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 43
    Par défaut
    Merci bien Gastiflex pour ce regard éclairé associé à des explications simples.
    Le raisonnement m'apparait cohérent mais cela me retourne :

    attention : format ‘%d’ expects type ‘int *’, but argument 3 has type ‘int’
    attention : format ‘%d’ expects type ‘int *’, but argument 4 has type ‘int’

    sur la ligne while ( fscanf ...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 43
    Par défaut
    Ne faut-il pas écrire ?

    while ( fscanf ( file, "%d %d", &valeur1, &valeur2 ) == 2)

  5. #5
    Membre éprouvé Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Par défaut
    Bonjour,

    oui c est ca, tu dois passer une adresse.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 43
    Par défaut
    Cela fonctionne effectivement mieux avec. Merci BainE pour la confirmation.

Discussions similaires

  1. problème de chemin avec la fonction fopen
    Par stars333 dans le forum Langage
    Réponses: 3
    Dernier message: 10/05/2007, 20h39
  2. problème avec la fonction fopen
    Par single dans le forum Langage
    Réponses: 5
    Dernier message: 24/03/2007, 11h40
  3. fonction Fopen
    Par TheOrY dans le forum Langage
    Réponses: 4
    Dernier message: 04/02/2007, 10h42
  4. Que renvoie la fonction fopen?
    Par PorkyFighter dans le forum C
    Réponses: 11
    Dernier message: 17/10/2006, 00h15
  5. [PLSQL HP3000] Fonction FOPEN
    Par anaon dans le forum Oracle
    Réponses: 6
    Dernier message: 06/10/2005, 09h50

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