Compiler une portion du programme avec condition

S_M_E Messages postés 26 Date d'inscription mardi 27 février 2007 Statut Membre Dernière intervention 29 août 2007 - 29 août 2007 à 13:01
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 - 29 août 2007 à 13:29
bjr je souhaite utilisé lepréprocesseur afin de compiler une portion du progarmme selon condition (si oui compile portion 1, si non compile portion 2); voici mon prog mais il ne fonctionne pas comme voulu puisqu'il bloque à la portion 2, pouvez vous me corriger?

#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<windows.h>
#include<stdlib.h>
#include<time.h>
#include<myconio.h>


#define PF printf
#define HOMEPAGE {PF(" ?URODOLLAR$\n");PF(" appuyer sur une touche...\n");getchar();clrscr();}
#define CPR 
//#define CPE     
     


void compteur(void);


 


int i=0,numloop=0;
char c;


 main()

      char reponse,dtel1[100],buffer[81],pword[9];
      char dtel[100][100],etel[100][100],code;
      int choix,transfer;
      float dollar,euro,vdollar;
      float stockdollar[10],stockeuro[10];
      char tab[7]="dollar",date[6];
      extern int i;
      register int i1;
      long start,end;
     
      struct idclient
       {
             char nom[15];
             char prenom[15];
             double numcarte[16];
       };
      
       struct idretrait
       {     
              struct idclient identite;
              double numop[4];
              double numauto[6];
              double date[8];
              double heure[6];
              double gab[6];                   
       };
      
       struct idretrait t[50];
      
      
       HOMEPAGE  
     
      //mot de passe
     
      do{
         clrscr();
         PF("entrez le mot de passe pour continuer....\t");
         i=0;
         while((buffer[i]=getchar())!='\n')
         i++;
         buffer[i]='\0';
         PF("le mot de passe que vous avez tapez est %s",buffer);
         getchar();
     
        if (strlen(buffer)>8) //test de la longeur du mot de passe
         {
          PF(" le mot de passe est trop long, recommencez....");
          code=getchar();//variable de controle      
         }
       
        if (strcmp(tab,buffer)==0) //test de comparaison entre le mot de passe saisie au mot de passe mémoriser
         {  
            //test de comparaison ok
            PF("bon mot de passe");
            getchar();
            code=27;//variable de contrôle
         }
         ++numloop;
        }while((code!=27&&numloop!=3));//fin de do while
      
      
 if (((numloop==3)&&(code!=27))||((numloop==3)&&(code==27)))
        #if defined CPR
        //PORTION DU PROGAMME 1
          #undef CPR
         PF("FIN DU PROGRAMME...\n");
         getche();
         #endif
       


       if ((code==27)&&(numloop!=3))                     
         #if defined CPR
    //PORTION DU PROGRAMME 2
         ............................
         ..........................
         #endif   
    
    
    
return 0;         
}


void compteur(void)
{
     static int f;
     PF("\n");
     PF("\n");
     PF("\n\t");
    
     do
     {
       for(f=0;f<30000;f++)
       gotoxy(1,25);
       PF(" %d",f);
       f++;
     }while(f<30000&&(getchar()!='\n'));
    
}


 

1 réponse

cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
29 août 2007 à 13:29
C'est normal tu fais #undef CPR fans la portion1 alors il pourra jamais faire la portion2. Ne perds pas de vue que les #ifdef et consorts sont résolus A LA COMPILATION et pas à l'exécution. Ce que je te suggère et de mettre tes deux parties dans un seul bloc:
#ifdef CPR
 if (((numloop==3)&&(code!=27))||((numloop==3)&&(code==27)))
{
         PF("FIN DU PROGRAMME...\n");
         getche();
}
else if ((code==27)&&(numloop!=3))   
{
// ...
}
#endif
0
Rejoignez-nous