Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2947 connectés 

  FORUM HardWare.fr
  Programmation
  C

  défaut dans le programme

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

défaut dans le programme

n°2134199
power22
Posté le 02-04-2012 à 00:44:17  profilanswer
 

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. }

mood
Publicité
Posté le 02-04-2012 à 00:44:17  profilanswer
 

n°2134200
Terminapor
I'll see you rise.
Posté le 02-04-2012 à 00:50:14  profilanswer
 

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
n°2134277
gilou
Modérateur
Modzilla
Posté le 02-04-2012 à 15:12:36  profilanswer
 

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é!  --
n°2134354
power22
Posté le 02-04-2012 à 19:41:54  profilanswer
 

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. }

n°2134355
gilou
Modérateur
Modzilla
Posté le 02-04-2012 à 20:03:37  profilanswer
 

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é!  --
n°2134365
power22
Posté le 02-04-2012 à 21:45:14  profilanswer
 

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 :)

n°2134374
gilou
Modérateur
Modzilla
Posté le 02-04-2012 à 22:06:31  profilanswer
 

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é!  --
n°2134377
power22
Posté le 02-04-2012 à 22:14:58  profilanswer
 

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

n°2134398
gilou
Modérateur
Modzilla
Posté le 02-04-2012 à 22:35:19  profilanswer
 

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é!  --
n°2134416
gilou
Modérateur
Modzilla
Posté le 02-04-2012 à 23:03:27  profilanswer
 

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é!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  défaut dans le programme

 

Sujets relatifs
réaliser un programme permettant de faire le PGCD de trois nombresAppel programme COBOL dans un sh
Lancer un programme en tache de fond Via un BatchAccès à un sharepoint via un programme VB.NET
ecrire un programme qui lit une suite de valeur à partir d'un entier nerreur dans la compilation de programme avec QWT
Programme pour ouvrir une fenêtre miniature en fonction de la T°CConnaitre l'utilisateur qui a lancé sudo qui a lancé mon programme ?
Mon nouveau programme: un réducteur d'URLCompiler et executer un programme avec des paquetages
Plus de sujets relatifs à : défaut dans le programme


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR