défaut dans le programme

défaut dans le programme - C - Programmation

Marsh Posté le 02-04-2012 à 00:44:17    

Bonsoir tout le monde , j'ai un problème avec un programme que j'ai fait , en effet je dois crée un fichier vente contenant des codes clients et des codes produits que je dois vérifier qu'ils appartiennent respectivement aux fichiers client et produit déjà crées ,mon problème est que lorsque j'exécute le programme il ne m'affiche que la première valeur puis il s'arrête de fonctionner  
merci si vous pouvez le corriger pour qu'il fonctionne correctement :)
merci d'avance pour l'aide :)
voilà le code :

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int Codecltn,Codeclt ,CodePdt,CodePdtn,nbv,k;
  4. float Qte;
  5. int find,trouve;
  6. char date[30];
  7. FILE* produit;
  8. FILE* client;
  9. FILE* vente;
  10. void verif_existp(){int m,find=0;
  11.      client=fopen("produit.doc","r+" );
  12.      printf("donner un code produit n°%d :",k);
  13.                scanf("%d",&CodePdtn);
  14.      while(find==0){
  15.                  m=ftell(produit);               
  16.      fscanf(produit,"%d",&CodePdt);
  17.      if(CodePdt=CodePdtn)
  18.      { printf("donner la quantité du produit vendu n°:%d",k);
  19.       scanf("%f",&Qte);
  20.        printf("donner la date de la vente n°:%d ",k);
  21.        scanf("%s",date);
  22.        find=1;
  23.        fseek(produit,m,SEEK_SET);
  24.        scanf("%d",CodePdt);
  25.        fprintf(vente,"Cclt:%d  Cpdt:%d  Qpdt:%f   date:%s",Codecltn,CodePdtn,Qte,date);
  26.        }
  27.      else
  28.      {printf("le code client n'existe pas" );
  29.      find=0;}
  30.      fclose(produit);}}
  31. void verif_existc(){int m,n,trouve=0;
  32.      client=fopen("client.doc","r+" );
  33.      printf("donner un code client n°%d :",k);
  34.                scanf("%d",&Codecltn);
  35.      while(trouve==0){
  36.         n=ftell(client);                     
  37.      fscanf(client,"%d",&Codeclt);
  38.      if(Codeclt=Codecltn)
  39.      {verif_existp();
  40.      trouve=1;
  41.      fseek(client,n,SEEK_SET);
  42.      }
  43.      else
  44.      {printf("le code client n'existe pas" );
  45.      trouve=0;}
  46.      fclose(client);}}
  47. int main(int argc, char *argv[])
  48. {
  49. printf("donner le nombre de ventes:" );
  50. scanf("%d",&nbv);
  51. vente=fopen("vente.doc","a" );
  52. for(k=1;k<=nbv;k++){ find=0;
  53.                      trouve=0;
  54.                 verif_existc();
  55.                 fclose(vente); }
  56.                
  57.                  
  58.              
  59.              
  60.                
  61.  
  62.   system("PAUSE" );
  63.   return 0;
  64. }

Reply

Marsh Posté le 02-04-2012 à 00:44:17   

Reply

Marsh Posté le 02-04-2012 à 00:50:14    

Euh, bon là comme ça le code est pas très lisible, mais bon :D
 
Déjà, un mauvais point :  90% de tes variables sont en global, pourquoi tu les fais pas passer par arguments dans tes fonctions ?
(Et pour la boucle for "for (int k=0;k<nbv;k++)" )


---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 02-04-2012 à 15:12:36    

C'est une honte de pondre un code aussi mal formaté.
Un simple formatage du code donne:
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int Codecltn, Codeclt, CodePdt, CodePdtn, nbv, k;
  4. float Qte;
  5. int find, trouve;
  6. char date[30];
  7. FILE* produit;
  8. FILE* client;
  9. FILE* vente;
  10. void verif_existp() {
  11.     int m, find = 0;
  12.     client = fopen("produit.doc", "r+" );
  13.     printf("donner un code produit n°%d :", k);
  14.     scanf("%d", &CodePdtn);
  15.     while (find == 0) {
  16.         m = ftell(produit);
  17.         fscanf(produit, "%d", &CodePdt);
  18.         if (CodePdt = CodePdtn) {
  19.             printf("donner la quantité du produit vendu n°:%d", k);
  20.             scanf("%f", &Qte);
  21.             printf("donner la date de la vente n°:%d ", k);
  22.             scanf("%s", date);
  23.             find = 1;
  24.             fseek(produit, m, SEEK_SET);
  25.             scanf("%d", CodePdt);
  26.             fprintf(vente, "Cclt:%d  Cpdt:%d  Qpdt:%f   date:%s", Codecltn, CodePdtn, Qte, date);
  27.         }
  28.         else {
  29.             printf("le code client n'existe pas" );
  30.             find = 0;
  31.         }
  32.         fclose(produit);
  33.     }
  34. }
  35. void verif_existc() {
  36.     int m, n, trouve = 0;
  37.     client = fopen("client.doc", "r+" );
  38.     printf("donner un code client n°%d :", k);
  39.     scanf("%d",&Codecltn);
  40.     while (trouve == 0) {
  41.         n = ftell(client);
  42.         fscanf(client, "%d", &Codeclt);
  43.         if (Codeclt = Codecltn) {
  44.             verif_existp();
  45.             trouve = 1;
  46.             fseek(client, n, SEEK_SET);
  47.         }
  48.         else {
  49.             printf("le code client n'existe pas" );
  50.             trouve=0;
  51.         }
  52.         fclose(client);
  53.     }
  54. }
  55. int main(int argc, char *argv[]) {
  56.     printf("donner le nombre de ventes:" );
  57.     scanf("%d", &nbv);
  58.     vente = fopen("vente.doc", "a" );
  59.     for (k = 1; k <= nbv; k++) {
  60.         find = 0;
  61.         trouve = 0;
  62.         verif_existc();
  63.         fclose(vente);
  64.     }
  65.     system("PAUSE" );
  66.     return 0;
  67. }


Et un formatage clair, ça permet de voir des erreurs manifestes, comme
if (CodePdt = CodePdtn)
au lieu de, je suppose
if (CodePdt == CodePdtn)
et aussi (à 3 reprises la même erreur)
fclose(client);
à un niveau de bloc différent du  
client = fopen(...)
qui lui explique bien ton pb...
 
Bref, un code propre, c'est utile.
A+,


Message édité par gilou le 02-04-2012 à 16:41:20

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 02-04-2012 à 19:41:54    

Bonsoir,merci pour l'aide j'ai corrigé ce que vous m'avez dmandé de corriger mais maintenant il m'affiche une boucle infinie , je ne sais pas où est le problème ?
merci si vous pouvez encore m'aider voilà le code rectifié :

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int Codecltn, Codeclt, CodePdt, CodePdtn, nbv, k;
  4. float Qte;
  5. int find, trouve;
  6. char date[30];
  7. FILE* produit;
  8. FILE* client;
  9. FILE* vente;
  10. void verif_existp() {
  11.     int m, find = 0;
  12.     client = fopen("produit.doc", "r+" );
  13.     printf("donner un code produit n°%d :", k);
  14.     scanf("%d", &CodePdtn);
  15.     while (find == 0) {
  16.         m = ftell(produit);
  17.         fscanf(produit, "%d", &CodePdt);
  18.         if (CodePdt == CodePdtn) {
  19.             printf("donner la quantité du produit vendu n°:%d", k);
  20.             scanf("%f", &Qte);
  21.             printf("donner la date de la vente n°:%d ", k);
  22.             scanf("%s", date);
  23.             find = 1;
  24.             fseek(produit, m, SEEK_SET);
  25.             scanf("%d", CodePdt);
  26.             fprintf(vente, "Cclt:%d  Cpdt:%d  Qpdt:%f   date:%s", Codecltn, CodePdtn, Qte, date);
  27.         }
  28.         else {
  29.             printf("le code client n'existe pas" );
  30.             find = 0;
  31.         }
  32.         fclose(produit);
  33.     }
  34. }
  35. void verif_existc() {
  36.     int m, n, trouve = 0;
  37.     client = fopen("client.doc", "r+" );
  38.     printf("donner un code client n°%d :", k);
  39.     scanf("%d",&Codecltn);
  40.     while (trouve == 0) {
  41.         n = ftell(client);
  42.         fscanf(client, "%d", &Codeclt);
  43.         if (Codeclt == Codecltn) {
  44.             verif_existp();
  45.             trouve = 1;
  46.             fseek(client, n, SEEK_SET);
  47.         }
  48.         else {
  49.             printf("le code client n'existe pas" );
  50.             trouve=0;
  51.         }
  52.         fclose(client);
  53.     }
  54. }
  55. int main(int argc, char *argv[]) {
  56.     printf("donner le nombre de ventes:" );
  57.     scanf("%d", &nbv);
  58.     vente = fopen("vente.doc", "w" );
  59.     for (k = 1; k <= nbv; k++) {
  60.      
  61.         verif_existc();
  62.         fclose(vente);
  63.     }
  64.     system("PAUSE" );
  65.     return 0;
  66. }

Reply

Marsh Posté le 02-04-2012 à 20:03:37    

Le fclose(vente) est pas corrigé.
Tout votre code de lecture dans le fichier client.doc m'a l'air pas clair du tout, voire faux.
Tester aussi quand on atteint la fin du fichier peut être utile.
A+,


Message édité par gilou le 02-04-2012 à 20:15:21

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 02-04-2012 à 21:45:14    

bonsoir, merci pour vos réponses :)
j'ai testé la fin du fichier et j'ai changé la place de fclose mais rien ne change toujours boucle infinie :(
s'il vous plait puisque vous m'avez dit que la lecture dans le fichier client vous semble fausse ,comment est ce que je peux la corriger ?
merci beaucoup d'avance pour l'aide :)

Reply

Marsh Posté le 02-04-2012 à 22:06:31    

Ben vous voulez faire quoi en lisant client.doc par exemple.
Rien que ça ce n'est pas clair au vu du code.
Expliquez ce que vous voulez faire, et on va regarder si votre code le fait.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 02-04-2012 à 22:14:58    

en lisant client.doc je veux savoir est ce que le code client que je saisi au clavier existe ou non dans le fichier client qui contient bien évidemment des codes clients

Reply

Marsh Posté le 02-04-2012 à 22:35:19    

Non mais je vous demande d'exprimer pas a pas comment votre algorithme de lecture doit marcher, hein.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 02-04-2012 à 23:03:27    

Bon, comme il est tard et que je vais plus passer, un exemple de comment faire pour lire un fichier et y rechercher un code:
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main() {
  4.     char *fprodname = "produit.doc";
  5.     FILE *fprod;
  6.     int nblu, code, codevoulu;
  7.     codevoulu = 12345; /* valeur de test */
  8.     fprod = fopen(fprodname, "r" );
  9.     if (fprod) {
  10.         do {
  11.             /* on essaye de lire un nombre */
  12.             nblu = fscanf(fprod, "%d", &code);
  13.             /* si on n'a pas pu lire de nombre, mais qu'il y a qque chose a lire
  14.                on avance d'un caractère et on rééssaye afin de sauter le caractère
  15.                qui empeche la lecture (sinon on bouclerait sur place) */
  16.             if (!nblu) fseek(fprod, 1, SEEK_CUR);
  17.         } while (nblu != EOF && (nblu != 1 || code != codevoulu));
  18.         /* on arrete quand on a la fin de fichier: nblu == EOF
  19.            ou que on a lu un nombre: nblu == 1 et que c'est le bon code: code == codevoulu
  20.            ça donne (nblu == EOF || (nblu == 1 && code == codevoulu))
  21.            et on en prend la négation comme test pour continuer */
  22.         fclose(fprod);
  23.         if (nblu != EOF) {
  24.             /* si on s'est pas arrété à cause de la fin de fichier */
  25.             fprintf(stdout, "Trouve!\n" );
  26.         }
  27.         else {
  28.             fprintf(stdout, "Pas trouve!\n" );
  29.         }
  30.     }
  31.     else {
  32.         fprintf(stderr, "Ouvertrure du fichier %s impossible!\n", fprodname);
  33.     }
  34.     return 0;
  35. }


 
Bon, ça peut s'améliorer, car ça va considérer comme trouvé si on a des caractères suivi de 12345 (par exemple abc12345), mais ça va te donner une idée.
A+,


Message édité par gilou le 02-04-2012 à 23:27:18

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed