programme qui ne fonctionne pas correctement
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

programme qui ne fonctionne pas correctement



  1. #1
    invite29c3e7f2

    programme qui ne fonctionne pas correctement


    ------

    Bonsoir tout le monde,
    le programme consiste à entrer des produits de codes différents dans un fichier alors je dois à chaque fois vérifier que le code n'existe pas et s'il existe j'affiche un message d'erreur ,mais le problème que ma fonction de vérification verif_code() ne fonctionne pas correctement en effet , si je donne le code 1 puis 2 puis 1 le message d'erreur s'affiche et la machine me demande d'entrer un nouveau code alors je mais 2 dans ce cas le message d'erreur ne s'affiche pas une autre fois malgré que le 2 est répété 2 fois ? merci pour ceux qui puissent m'aider
    mon code est le suivant :

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    
    FILE * produit;
    long int Codep,Codepr;
    char Couleur[30];
    float prix;
    int nbp,i;
    
    void verif_code()
    {  
      produit=fopen("produit.doc","r");
      int trouve=0;
      while((!(feof(produit)))&&(trouve==0))
        {   printf("donner le code n %d à rechercher : ",i);
          scanf("%ld",&Codepr); 
          fscanf(produit,"%ld", &Codepr);              
          if(Codep != Codepr)
    	{
    	  printf("donner la couleur du produit numéro %d\n",i);
    	  scanf("%s",Couleur);
    	  printf("donner le prix du produit numéro %d\n",i);
    	  scanf("%f",&prix);
    	  trouve=1;
    	}
          else
    	{
    	  printf("erreur le code existe déjà  ") ;
              trouve=0;
    	}
          fclose(produit);
        }
    }
     
     
    int main(int argc, char *argv[])
    {
      printf("donner le nombre de produits ");
      scanf("%d",&nbp);
      produit=fopen("produit.doc","w");
      printf("donner le code du produit numéro %d\n",1);
      scanf("%ld",&Codep);
      printf("donner la couleur du produit numéro %d\n",1);
      scanf("%s",Couleur);
      printf("donner le prix du produit numéro %d\n",1);
      scanf("%f",&prix);
      fprintf(produit,"Code du produit  :%ld de couleur :%s ayant pour prix : %f\n",Codep,Couleur ,prix);
    fclose(produit);
      for(i=2;i<=nbp;i++)
        {
          verif_code();
          produit=fopen("produit.doc","a");
          fprintf(produit,"Code du produit :%ld de couleur :%s ayant pour prix : %f\n",Codepr,Couleur ,prix);
          fclose(produit);
        }
     
      system("PAUSE");	
      return 0;
    }

    -----

  2. #2
    invite29c3e7f2

    Re : programme qui ne fonctionne pas correctement

    bonjour, aidez moi les amis s'il vous plait je n'ai pas pu résoudre le problème depuis 3 jours

  3. #3
    Jack
    Modérateur

    Re : programme qui ne fonctionne pas correctement

    Il faut dire que ton programme est bizarrement construit. Je ne vois pas trop l'intérêt de ta fonction verif_code telle qu'elle est définie: cette fonction devrait se contenter de faire une recherche dans le fichier et recevrait en paramètre l'identificateur du fichier et la valeur recherchée. Les saisies doivent être faites en dehors de cette fonction, dans une autre fonction si tu veux.
    De plus les variables globales sont à éviter autant que possible, même si elles semblent simplifier la programmation dans un 1er temps.

    Quoiqu'il en soit, il y a des trucs qui peuvent poser problème, en particulier le fclose dans la fonction verif_code qui est dans la boucle while. Le fichier sera donc fermé à la 1ère lecture d'un produit dans le fichier. Je ne sais pas comment tu travailles, mais les environnement de développement possèdent tous un débugger permettant d'exécuter les programmes pas-à-pas. ce fclose mal placé aurait alors sauté aux yeux.

    Il faut aussi se méfier de l'apparente simplicité de la fonction feof(). En effet, celle-ci ne détecte une fin de fichier non pas après la lecture du dernier enregistrement, mais que lorsque l'on fait une lecture alors qu'il n'y a plus rien à lire. Il convient donc de tester les valeurs de retour des fonctions de lecture de fichier.

    A+

  4. #4
    invite29c3e7f2

    Re : programme qui ne fonctionne pas correctement

    merci beaucoup pour la réponse ,
    j'ai essayé de séparer la fonction verif_code de la saisie des variables mais je trouve toujours un problème
    est ce que vous pouvez m'aider s'il vous plait ?
    merci beaucoup d'avance

  5. A voir en vidéo sur Futura
  6. #5
    Jack
    Modérateur

    Re : programme qui ne fonctionne pas correctement

    j'ai essayé de séparer la fonction verif_code de la saisie des variables mais je trouve toujours un problème
    Il me semble que j'avais mis d'autres problèmes plus importants en évidence ...

  7. #6
    invitea8d03b1e

    Post Re : programme qui ne fonctionne pas correctement

    A oui... en effet...

    - orthogonalisation du code non rigoureuse.
    - banalisation des I/O trop opaque (isoler/exo portant uniquement sur les IO)
    - si vous n'y êtes pas obligé(e), utilisez +tot le g++ avec -Wall (donc C++) au lieu des IO du C-Standard qui sont assez tordues pour justifier de NE PAS commencer à programmer avec :: (remarque perso.)

    Commence par décrire "en pseudo code" très clairement l'objectif du code.
    Celui-ci doit tenir en 3 à 5 lignes, au pif.

    hum.


    Code:
    donner le nombre de produits 2
    donner le code du produit numéro 1
    TOTO
    donner la couleur du produit numéro 1
    donner le prix du produit numéro 1
    117
    donner le code n 2 à rechercher : test
    *** glibc detected *** ./xtest: double free or corruption (top): 0x09d5d008 ***
    ======= Backtrace: =========
    /lib/tls/i686/cmov/libc.so.6(+0x6b591)[0xb7570591]
    /lib/tls/i686/cmov/libc.so.6(+0x6cde8)[0xb7571de8]
    /lib/tls/i686/cmov/libc.so.6(cfree+0x6d)[0xb7574ecd]
    /lib/tls/i686/cmov/libc.so.6(fclose+0x14a)[0xb7560aaa]
    ./xtest[0x804873f]
    ./xtest[0x8048875]
    /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0xb751bbd6]
    ./xtest[0x80485b1]
    ======= Memory map: ========
    08048000-08049000 r-xp 00000000 08:01 6204813    /home/franca/Desktop/testes/xtest
    08049000-0804a000 r--p 00000000 08:01 6204813    /home/franca/Desktop/testes/xtest
    0804a000-0804b000 rw-p 00001000 08:01 6204813    /home/franca/Desktop/testes/xtest
    09d5d000-09d7e000 rw-p 00000000 00:00 0          [heap]
    b7400000-b7421000 rw-p 00000000 00:00 0 
    b7421000-b7500000 ---p 00000000 00:00 0 
    b7504000-b7505000 rw-p 00000000 00:00 0 
    b7505000-b7658000 r-xp 00000000 08:01 10356037   /lib/tls/i686/cmov/libc-2.11.1.so
    b7658000-b7659000 ---p 00153000 08:01 10356037   /lib/tls/i686/cmov/libc-2.11.1.so
    b7659000-b765b000 r--p 00153000 08:01 10356037   /lib/tls/i686/cmov/libc-2.11.1.so
    b765b000-b765c000 rw-p 00155000 08:01 10356037   /lib/tls/i686/cmov/libc-2.11.1.so
    b765c000-b765f000 rw-p 00000000 00:00 0 
    b765f000-b767c000 r-xp 00000000 08:01 10223702   /lib/libgcc_s.so.1
    b767c000-b767d000 r--p 0001c000 08:01 10223702   /lib/libgcc_s.so.1
    b767d000-b767e000 rw-p 0001d000 08:01 10223702   /lib/libgcc_s.so.1
    b767e000-b767f000 rw-p 00000000 00:00 0 
    b767f000-b76a3000 r-xp 00000000 08:01 10356045   /lib/tls/i686/cmov/libm-2.11.1.so
    b76a3000-b76a4000 r--p 00023000 08:01 10356045   /lib/tls/i686/cmov/libm-2.11.1.so
    b76a4000-b76a5000 rw-p 00024000 08:01 10356045   /lib/tls/i686/cmov/libm-2.11.1.so
    b76a5000-b778e000 r-xp 00000000 08:01 13637200   /usr/lib/libstdc++.so.6.0.13
    b778e000-b778f000 ---p 000e9000 08:01 13637200   /usr/lib/libstdc++.so.6.0.13
    b778f000-b7793000 r--p 000e9000 08:01 13637200   /usr/lib/libstdc++.so.6.0.13
    b7793000-b7794000 rw-p 000ed000 08:01 13637200   /usr/lib/libstdc++.so.6.0.13
    b7794000-b779b000 rw-p 00000000 00:00 0 
    b77b7000-b77bb000 rw-p 00000000 00:00 0 
    b77bb000-b77bc000 r-xp 00000000 00:00 0          [vdso]
    b77bc000-b77d7000 r-xp 00000000 08:01 10223645   /lib/ld-2.11.1.so
    b77d7000-b77d8000 r--p 0001a000 08:01 10223645   /lib/ld-2.11.1.so
    b77d8000-b77d9000 rw-p 0001b000 08:01 10223645   /lib/ld-2.11.1.so
    bf962000-bf983000 rw-p 00000000 00:00 0          [stack]
    erreur le code existe déjà  donner le code n 2 à rechercher : erreur le code existe déjà  Abort
    Quand on commence à avoir des erreur de ce genre (allocation),
    il faut vraiment etre ultra rigoureux avec les notion d'accès "directe", "par référence", le "scope" des objets/variables traitées, etc.

    courage

Discussions similaires

  1. [Blanc] LL Ariston avtl 135 : clignote, ne fonctionne pas correctement !
    Par aneton33 dans le forum Dépannage
    Réponses: 2
    Dernier message: 22/12/2011, 05h52
  2. dev_C++ n'exécute pas correctement le programme ???!!!!
    Par invite29c3e7f2 dans le forum Programmation et langages, Algorithmique
    Réponses: 14
    Dernier message: 17/10/2011, 05h53
  3. programme pic simple qui ne fonctionne pas
    Par alainav1 dans le forum Électronique
    Réponses: 6
    Dernier message: 10/04/2011, 15h55
  4. [thermique] Chaudière qui ne chauffe pas correctement
    Par invitea2f8f4e3 dans le forum Dépannage
    Réponses: 10
    Dernier message: 29/11/2010, 22h26
  5. [Blanc] Pouquoi mon réfrigérateur ne fonctionne pas correctement ?
    Par invite0dd270a8 dans le forum Dépannage
    Réponses: 6
    Dernier message: 23/05/2008, 16h22