Variables globales qui changent pas de valeur.... :|

Variables globales qui changent pas de valeur.... :| - C++ - Programmation

Marsh Posté le 19-11-2002 à 06:02:28    

Bonjour,
voila avant mon main je mais ca:
int retourSupp;
 
dans une fonction je fais
if(supp<0)
{
  retourSupp++;
}
 
et dans une autre fonction (declaré avant) je fais:
 
if(retourSupp<=0)
{
  menuClient();
}
else
{
  menuSupp();
}
 
mon probleme c'est que dans ma fonction (la premiere) retourSupp est bien a 1 mais des que ca passe a l'autre fonction ca revien a 0... pourquoi? une variable globale reste pas a la derniere valeur qu'on lui donne??? comprend pas la...


---------------
[:zeitoon] HxC rulezzzzzzzzz
Reply

Marsh Posté le 19-11-2002 à 06:02:28   

Reply

Marsh Posté le 19-11-2002 à 06:15:55    

Donne ton code réel, par copier-coller.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 19-11-2002 à 06:21:20    

Code :
  1. ///// Variables globales//////////////////////////////
  2. FILE *newClient;
  3. int retourSupp;
  4. /////////////// MAIN //////////////////
  5. void main(void)
  6. {
  7.   fmenuPrincipal();
  8. }
  9. void fconsultationClient(void)
  10. {
  11.   printf("retourSupp: %d",retourSupp);
  12.   getch();
  13.   FILE *newClient;
  14.   int y=6,nombreClient=0;
  15.   flushall();
  16.   clrscr();
  17.   if((newClient=fopen("clients.txt","r" ))==NULL)
  18.   {
  19.     printf("Erreur le fichier 'clients.txt' n'existe pas encore\n" );
  20.     getch();
  21.   }
  22.   else
  23.   {
  24. /* je vous passe l'affichage.... */
  25.   }
  26.   printf("retourSupp: %d",retourSupp);
  27.   getch();
  28.   if (retourSupp==0)
  29.   {
  30.     fmenuClient();
  31.   }
  32.   else
  33.   {
  34.     fsupressionClient();
  35.   }
  36. }
  37. void fsupressionClient(void)
  38. {
  39.   FILE *temporaire;
  40.   int compteur=0,num,trouve=0,numSuppCli,retourSupp=0;
  41.   char reponse,raisonSocial[25+1];
  42.   if((newClient=fopen("clients.txt","r" ))==NULL)
  43.   {
  44.     printf("Erreur, il n'existe pas de fichier 'clients.txt'\n" );
  45.     getch();
  46.     fmenuClient();
  47.   }
  48.   else
  49.   {
  50.     while(fread(&enreg,sizeof(Sclient),1,newClient),!feof(newClient))
  51.     {
  52.       if(enreg.num!=0)
  53.       {
  54.         compteur++;
  55.       }
  56.       /*le if(enreg.num!=0) est la pour une deuxieme utilisation
  57.       lorsqu'il existe deja un enreg.num=0 mais cela veut dire
  58.       qu'il n'y a pas de client a cette emplacement*/
  59.     }
  60.     fclose(newClient);
  61.     if(compteur==0)
  62.     {
  63.       printf("Il n'y à aucun client dans le fichier\n" );
  64.       getch();
  65.       fmenuClient();
  66.     }
  67.     else if(compteur==1)
  68.     {
  69.       /*blablablabla...*/
  70.     {
  71.       flushall();
  72.       if((temporaire=fopen("clientsTemporaire.txt","w" ))==NULL)
  73.       {
  74.         printf("Erreur\n" );
  75.         getch();
  76.         fmenuMAJClient();
  77.       }
  78.       else
  79.       {
  80.         fclose(temporaire);
  81.         clrscr();
  82.         printf("Suppression d'un client\n" );
  83.         printf("Desirez-vous consulter la liste des clients? (o/n)\n" );
  84.         scanf("%c",&reponse);
  85.         printf("toto" );
  86.         if(reponse=='o'||reponse=='O')
  87.         {
  88.           clrscr();
  89.         printf("toto" );
  90.           retourSupp++; //servira a revenir dans le menu de la suppression
  91.           printf("retourSupp: %d",retourSupp);
  92.           getch();
  93.           fconsultationClient();
  94.         }

bon je savais pas si je devais tt mettre ou pas... alors j'en ai mis qu'une partie :) mais si y'en a encore trop...


---------------
[:zeitoon] HxC rulezzzzzzzzz
Reply

Marsh Posté le 19-11-2002 à 06:29:48    

Code :
  1. void fsupressionClient(void)
  2. {
  3. FILE *temporaire;
  4. int compteur=0,num,trouve=0,numSuppCli,retourSupp=0;

Oh la belle variable locale initialisée !


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 19-11-2002 à 06:33:12    

Musaran a écrit a écrit :

Code :
  1. void fsupressionClient(void)
  2. {
  3. FILE *temporaire;
  4. int compteur=0,num,trouve=0,numSuppCli,retourSupp=0;

Oh la belle variable locale initialisée !
 



:lol:  :pt1cable:  :sweat: merci je l'avais oubliée celle la ... et je la voyais même plus  :sarcastic:


---------------
[:zeitoon] HxC rulezzzzzzzzz
Reply

Marsh Posté le 19-11-2002 à 21:42:25    

Je connais ça...
Des fois on sature, on bloque, et on laisse passer les pires bourdes.
 
Dans ces situations, aller faire un tour, se consacrer à autre chose, puis y revenir plus tard.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 19-11-2002 à 21:45:38    

Musaran a écrit a écrit :

Je connais ça...
Des fois on sature, on bloque, et on laisse passer les pires bourdes.
 
Dans ces situations, aller faire un tour, se consacrer à autre chose, puis y revenir plus tard.




Dans le cas présent je crois que le mieux aurait été d'effacer le fichier source par erreur et d'avoir à tout recoder :D

Reply

Marsh Posté le 20-11-2002 à 09:47:42    

La meilleure façon d'éviter ce genre de bourde de manière sure reste de l'encapsuler complètement avec des accesseurs : tu la mets dans un fichier .c à part, déclarée en static pour que le reste de l'appli n'y ait pas accès, et tu définis un get() et un set() publics sur cette variable.
 
Le reste du code ne pourra alors modifier la variable globale qu'au travers du set(), et la lire qu'avec le get(). Tu pourras ainsi aisément contrôler qui modifie quoi.

Reply

Marsh Posté le 21-11-2002 à 04:02:01    

Ben oui, mais si tu viens mettre de la rigueur et de la structure là-dedans, où est fun ?


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 21-11-2002 à 10:13:11    

:sarcastic:  :non:  :D

Reply

Sujets relatifs:

Leave a Replay

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