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 lors de l'utilisation des structures dans les fichiers


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Janvier 2013
    Messages : 6
    Par défaut Problème lors de l'utilisation des structures dans les fichiers
    Bonjour,

    j'ai un problème dans un programme C lors de l'utilisation des structures dans les fichiers.. c'est que cette boucle est infinie !!
    ceci est la procédure de remplissage du fichier:
    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
    void remp(){
       printf("donner le nome de fichier a creer : \n");
       scanf("%s",f);
       p = fopen(f, "w");
     
      printf("*** Création du fichier %s ***\n", f);
     
      printf("nombre des personnes que vous voulez ajoute :\n ");
     
      scanf("%d",&n);
     
      for (i=0;i<n;i++)
     
        {
     
         printf("personne N: %d \n", i+1);
     
         printf("Numero de personne N: %d \n", i+1);
         scanf("%d",&e.nm);      
     
         printf("Nom de personne N: %d \n", i+1);
         scanf("%s",e.nom);
     
         printf("Prenom de personne N: %d \n", i+1);
         scanf("%s",e.pnom);
     
         printf("adress electronique de personne N: %d \n", i+1);
         scanf("%s",e.email);
     
         printf("date de naissance de personne N: %d \n", i+1);
         scanf("%d",&e.d.j);
         scanf("%d",&e.d.m);
         scanf("%d",&e.d.a);
     
         fprintf(p, "%d, %s, %s, %s, %d/%d/%d\n",e.nm,e.nom,e.pnom,e.email,e.d.j,e.d.m,e.d.a);
     
         }
         fclose(p);
     
    }
    et ceci est la procédure d'ajout des autres personnes :
    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
     
    void ajoute(){
      printf("donner le nome de votre fichier : \n");
       scanf("%s",f);
      p = fopen(f, "r");
      c=0;
     
      if (!p)
     
         {  
     
          c=1;
     
         }
      if(c==0){
     
     
      q = fopen(qq, "w");
     
     
     
          printf("personne N: %d \n", i+1);
     
         printf("Numero de personne N: %d \n", i+1);
         scanf("%d",&e.nm);      
     
         printf("Nom de personne N: %d \n", i+1);
         scanf("%s",e.nom);
     
         printf("Prenom de personne N: %d \n", i+1);
         scanf("%s",e.pnom);
     
         printf("adress electronique de personne N: %d \n", i+1);
         scanf("%s",e.email);
     
         printf("date de naissance de personne N: %d \n", i+1);
         scanf("%d",&e.d.j);
         scanf("%d",&e.d.m);
         scanf("%d",&e.d.a);
     
     
      while (!feof(p))
     
        {
         fscanf(p, "%d, %s, %s, %s, %d/%d/%d\n",&e.nm,e.nom,e.pnom,e.email,e.d.j,e.d.m,e.d.a);
     
         fprintf(q,"%d, %s %s, %s, %d/%d/%d\n",e.nm,e.nom,e.pnom,e.email,e.d.j,e.d.m,e.d.a);
     
        }
     
     
       fprintf(q,"%d, %s %s, %s, %d/%d/%d\n",e.nm,e.nom,e.pnom,e.email,e.d.j,e.d.m,e.d.a);
     
      while (!feof(p))
     
        {
         fscanf(q, "%d, %s, %s, %s, %d/%d/%d\n",&e.nm,e.nom,e.pnom,e.email,e.d.j,e.d.m,e.d.a);
     
         fprintf(p,"%d, %s %s, %s, %d/%d/%d\n",e.nm,e.nom,e.pnom,e.email,e.d.j,e.d.m,e.d.a);
     
        }
      fclose(q);
      fclose(p);
    }
    else if (c==1){ printf("\a erreur: impossible d'ouvrir  le fichier: %s.\n", f);}
    }
    la boucle infinie est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     while (!feof(p))
     
        {
         fscanf(p, "%d, %s, %s, %s, %d/%d/%d\n",&e.nm,e.nom,e.pnom,e.email,e.d.j,e.d.m,e.d.a);
     
         fprintf(q,"%d, %s %s, %s, %d/%d/%d\n",e.nm,e.nom,e.pnom,e.email,e.d.j,e.d.m,e.d.a);
     
        }
    et aussi cette boucle est infinie !! :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     while (!feof(p))
     
        {
         fscanf(q, "%d, %s, %s, %s, %d/%d/%d\n",&e.nm,e.nom,e.pnom,e.email,e.d.j,e.d.m,e.d.a);
     
         fprintf(p,"%d, %s %s, %s, %d/%d/%d\n",e.nm,e.nom,e.pnom,e.email,e.d.j,e.d.m,e.d.a);
     
        }
    merci de m'aider à résoudre ce problème...

    merci d'avance

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    feof() ne se teste pas ainsi; ce que tu dois tester, c'est si fscanf() retourne bien la bonne valeur (nombre d'élements convertis).

    Ainsi, si tu as une erreur dans le fichier, tu sauras quand arrêter la lecture. C'est seulement ensuite que tu pourras utiliser feof() pour savoir s'il s'agit d'une fin de fichier ou d'une vraie erreur.
    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. Problème lors de l'utilisation des TVP
    Par WOLO Laurent dans le forum ADO.NET
    Réponses: 2
    Dernier message: 22/06/2011, 17h05
  2. Réponses: 0
    Dernier message: 22/07/2010, 09h34
  3. utilisation des structures dans une interface
    Par ralf91 dans le forum C#
    Réponses: 5
    Dernier message: 22/01/2010, 16h55
  4. Utiliser des Filler dans les structures avec ACCEPT
    Par beegees dans le forum Cobol
    Réponses: 2
    Dernier message: 13/01/2008, 19h09
  5. [XSL] Utiliser des CSS dans un fichier XSL
    Par alainme dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 13/04/2005, 10h47

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