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

  FORUM HardWare.fr
  Programmation
  C

  [C] euh.... Probleme sur un truc pas tres dur (1er post + lisible)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] euh.... Probleme sur un truc pas tres dur (1er post + lisible)

n°769647
iolsi
UBCT Way Of Life:
Posté le 18-06-2004 à 23:36:15  profilanswer
 

bah voila en fait j'ai un projet a faire en C mais je suis vraiment pas tres fort (licence maths-géographie) je dois faire le jeu du master mind dans lequel l'utilisateur aura le choix entre jouer et assister a une partie, j'ai fait 70% du truc et ca marche pas trop mal mais j'ai un probleme a un moment, j'ai crée une fonction de conversion couleur-chiffre, cette fonction marche quand je doix trouver la combinaison mais elle ne marche pas quand je dois donner le code clé. j'ai aussi un autre probleme de compteur
 
y'a 1 mois mon prof avait corrigé un truc en rajoutant un scanf donc c'est peut etre la que ca ne va pas, j'ai fait une recherche ici et j'ai vu que je suis pas le seul a avoir eu des problemes avec cette fonction, mais comme je suis nul je comprends pas ce que je dois changer/rajouter :/
 
je pense que ca vous prendra pas trop de temps, j'ai un probleme dans la fonction clé et pour le numéro de l'essai
 
merci d'avance  :D  
 
 

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
  struct combinaison{ int toto[4] ;};
   
  typedef struct combinaison tab;
   
   
 
     
     
     
     int conv(char i) {int j;
 
            switch(i){
      case 'r' : {j=0;break;}
      case 'j' : {j=1;break;}
      case 'b' : {j=2;break;}
      case 'v' : {j=3;break;}
      case 'n' : {j=4;break;}
      case 'c' : {j=5;break;}
      default : j=10;
                   }
 
           return j;
       }
 
 
    tab saisie()
           {
  int i,j,k; char caract;tab essai;
 
     
      for(i=0;i<4;i++){
              printf(" tapez le code couleur pour l'emplacement numero %d : \n ", i+1);
                       scanf("%c", &caract);
 
                        j=conv(caract);
                         scanf("%c", &caract);
                          printf (" \n \n" );
 
                     if (j!=1 && j!=2 && j!=3 && j!=4 && j!=5 && j!=0)
                    {
            printf ("cette couleur n'existe pas, veuillez recommencer \n" );
 
       i=i-1;
    }
 
 
 
   else essai.toto[i]=j;
/*    printf (" %d  ", essai.toto[i]); */
   }
 
 
                      /* for(k=0;k<4;k++) {printf (" %d  ", essai.toto[k]);} */              return essai;
                     }
 
 
 
 
                               
           
          tab cle() {
          int a,b,c,d; tab key;char coul;
 
 
 
                printf ("     r pour rouge    j pour jaune   b pour blanc   \n  " );
 
         printf ("   v pour vert    n pour noir    c pour cyan  \n  \n" );
 
         printf ("Vous n'avez pas le droit de mettre deux fois la meme couleur dans la clé \n \n" );
 
 
 
         
         printf(" tapez le code couleur pour l'emplacement numero 1  " );
 
       scanf("%c", &coul);
                            a=conv(coul);
                             scanf("%c", &coul);
                            key.toto[0]=a;
                            printf("%c ", coul);
                            printf("%d",a);
 
             
       
                       printf("\n tapez le code couleur pour l'emplacement numero 2  " );
 
         scanf("%c", &coul);
                              b=conv(coul);
                              scanf("%c", &coul);
                              printf("%c ", coul);
                              printf("%d", b)
 
  /*             while (b!=a) {
                           printf (" \n Vous avez déja utilisé cette couleur \n " );
      printf(" re-tapez le code couleur pour l'emplacement numero 2  " );
 
      scanf("%c", &h);
                           b=conv(h);
                          scanf("%c", &h);}
       key.toto[1]=b;
           
 
 
               printf("\n tapez le code couleur pour l'emplacement numero 3  " );
 
         scanf("%c", &h);
                              c=conv(h);
                              scanf("%c", &h);
 
 
 while ((c!=a) && (c!=b) ) {
 
                             printf ("\n Vous avez déja utilisé cette couleur \n " );
       printf("\n re-tapez le code couleur pour l'emplacement numero 3  " );
 
       scanf("%c", &h);
                            c=conv(h);
                            scanf("%c", &h);}
 
       key.toto[2]=c;
 
 
 
                            printf("\n tapez le code couleur pour l'emplacement numero 4  " );
 
         scanf("%c", &h);
                              d=conv(h);
                              scanf("%c", &h);
 
 
     while ((d==a) && (d==b) && (d==c) ) {
 
        printf (" \n Vous avez déja utilisé cette couleur \n " );
    printf(" \n re-tapez le code couleur pour l'emplacement numero 4  " );
 
     scanf("%c", &h);
                         d=conv(h);
                           scanf("%c", &h);}
       key.toto[3]=d; */
 
                           return key ;}
 
 
 
 
 
 
 
 
     
    tab generation (){
 
 
        int a,b,c,d;tab rep;srand( time(NULL) );
 
 
 
                      a=rand()%6;
                 /* printf("%d  ",a) */
                  ;rep.toto[0]=a;
                     srand( time(NULL) );
                            b=a;
 
    while (b==a){  
 
                        b=rand()%6;};
                        rep.toto[1]=b;
                     /* printf("%d  ",b) */ ;
                      srand( time(NULL) );
                              c=b;
 
    while (c==a || c==b ){
                         c=rand()%6;};
                         rep.toto[2]=c;  
                       /* printf("%d  ",c) */  
                      ;srand( time(NULL) );
                             d=c;
 
      while (d==a || d==b || d==c){
                          d=rand()%6;};
                         rep.toto[3]=d;
                         /* printf("%d  ",d) */ ;
                        srand( time(NULL) );
                          return rep;
 
 
                }
 
                 
           int bienplaces (tab a, tab b) /* donne le nombre de couleurs bien placées*/{
 
              int i,j;j=0;
 
               for(i=0;i<4;i++){
 
        if (a.toto[i]==b.toto[i]) j++;
                           }
            return j;}
 
 
 
 
         int malplaces (tab p, tab r) { /*p sera une proposition, r sera la réponse a trouver*/
 
  int a,c,b,d,i,w,x,y,z;i=0;
 
     
                           a=r.toto[0];
                           b=r.toto[1];
                           c=r.toto[2];
                           d=r.toto[3];
     
                           w=p.toto[0];
                           x=p.toto[1];
                           y=p.toto[2];
                           z=p.toto[3];
 
  if ( (w!=a) && ( (w==b) ||( w==c) || (w==d) ) ) i++;
                   
  if ( (x!=b) && ( (x==a) || (x==c)  || (x==d) ) ) i++;
     
  if ( ( y!=c) && ( (y==a) || (y==b) || (y==d) ) ) i++;
     
  if ( (z!=d) && ( (z==a ) ||  (z==c) || (z==b) ) ) i++;
 
                                                                     return i;   }
 
 
 
                   
     
     
         void recap (tab j, int y) { /*recapitule l'essai de l'utilisateur au yème coup */
  int i,p,t;
     
printf ("Voici Votre Proposition N° %d :    ", t);
 
     for (i=0;i<4;i++) {
 
                           p=j.toto[i];
   switch(p){
                               
                           case 0 : {printf ("rouge " );break;}
 
             case 1 :{ printf ("jaune " );break;}
 
             case 2 : {printf ("blanc " );break;}
 
              case 3 : {printf ("vert " );break;}
 
             case 4 : {printf ("noir " );break;}
 
             case 5 : {printf ("cyan " );break;}
                                    default : {printf("beti" );break;}
                                                                  }  }  printf ("\n \n" );}
 
 
   
   
 void bpmp(int i, int j){ /*cette fonction donnera a l'utilisateur le nombre de couleurs bien placés et mal placés */
     
       printf ("Vous avez %d couleur(s) bien placée(s) et %d couleur(s) mal placée(s) \n \n", i,j);
     
 
                   }
 
 
 
     int increm (int i){
  int j;
 
 
                       switch(i){
                       case 0 : {j=i++;break;}
 
                       case 1 :{j=i++;break;}
 
         case 2 : {j=i++;break;}
 
         case 3 : {j=i++;break;}
 
         case 4 : {j=i++;break;}
 
         case 5 : {j=0;break;}
                             default : {printf("beti" );break;}  }
                                                         
                                                       return j ; }
 
             
             
             
     
          /*  tab resol  (tab ancien , int i , int j) {
 
  int a,b,c,d,k;
 
   a=ancien.toto[0];
                        b=ancien.toto[1];
                        c=ancien.toto[2];
                        d=ancien.toto[3];
 
 
    */
 
     
 
 
 
 
       int main (int argc,char**argv)  {
    tab rep /* la rŽponse*/ ;
      int palette[6];
 
   tab indic;
   tab essai;tab k,key;char choix;
                int i,j,b,m,compt;compt=1;
 
  for (i=0;i<=5;i++) {
 
           palette[i]=i;};
 
 
  /*rouge=r=0   jaune=j=1   blanc=b=2
 
    vert=v=3    noir=n=4    cyan=c=5  */
 
     printf(" \n  \n " );
 
     printf ("               " );
 
     printf (" _____----MASTERMIND----____ \n \n" );
     
 
 
    printf ("Voulez vous etre le maitre du jeu??? \n          tapez o pour oui, n pour non      " );
 
                scanf("%c", &choix);  
           
            switch (choix){
     
 
                    case  'n' : { scanf("%c", &choix);
                                    rep=generation();
                                       printf("\n" );
                                         printf ("     r pour rouge    j pour jaune   b pour blanc   \n  " );
                                        printf ("   v pour vert    n pour noir    c pour cyan  \n  \n" );
 
                             do {k=saisie();
                             recap ( k, compt );
                             b=bienplaces(rep , k );
                              m=malplaces(rep , k );
      bpmp(b,m);compt++;
      }
  while (compt <30); break ;}
 
 
  case 'o' : {key=cle();break;}
 
                default : {printf("Au revoir \n  \n" );break;} }
 
 
return 0;
 
}


Message édité par iolsi le 19-06-2004 à 01:36:17

---------------
Wenger m'a violé :/
mood
Publicité
Posté le 18-06-2004 à 23:36:15  profilanswer
 

n°769664
jagstang
Pa Capona ಠ_ಠ
Posté le 19-06-2004 à 00:09:16  profilanswer
 

je te debug ça pour demain


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°769668
iolsi
UBCT Way Of Life:
Posté le 19-06-2004 à 00:16:04  profilanswer
 

merci
 
bah je pense que y'a pas grand chose a faire, juste quelques trucs de routiers a connaitre
 
j'ai mis en gras ce que le prof avait fait comme manip, je l'ai refait partout mais ca n'a pas marché:
 
for(i=0;i<4;i++){  
        printf(" tapez le code couleur pour l'emplacement numero %d : \n ", i+1);  
                    scanf("%c", &caract);  
 
               j=conv(caract);  
               scanf("%c", &caract) ;


Message édité par iolsi le 19-06-2004 à 00:17:24

---------------
Wenger m'a violé :/
n°769672
iolsi
UBCT Way Of Life:
Posté le 19-06-2004 à 00:23:38  profilanswer
 

et j'ai lu qu'on pouvait mettre des "fflush(stdin)" partout, c'est préconisé ou pas??
 
edit: j'ai essayé et ca change rien


Message édité par iolsi le 19-06-2004 à 00:34:47

---------------
Wenger m'a violé :/
n°769684
jotb
Mon nom est Capitaine.
Posté le 19-06-2004 à 00:38:56  profilanswer
 

à mon avis, tu dois dépasser la mémoire allouée quand tu fais le scanf. La taille de caract est peut-être en cause.
 
edit : finalement, j'installe cygwin, peut etre que je vais pouvoir t'aider avant l'an 3000.


Message édité par jotb le 19-06-2004 à 00:39:33

---------------
L'Europe sera définitivement foutue quand les USA auront gagné la Coupe du Monde de foot...
n°769686
iolsi
UBCT Way Of Life:
Posté le 19-06-2004 à 00:46:04  profilanswer
 

j'essaye de rentre le truc + présentable mais c'est chaud :/


---------------
Wenger m'a violé :/
n°769690
jotb
Mon nom est Capitaine.
Posté le 19-06-2004 à 00:51:39  profilanswer
 

iolsi a écrit :

j'essaye de rentre le truc + présentable mais c'est chaud :/


 
tu utilises quel soft pour éditer ton programme ?


---------------
L'Europe sera définitivement foutue quand les USA auront gagné la Coupe du Monde de foot...
n°769692
iolsi
UBCT Way Of Life:
Posté le 19-06-2004 à 00:54:01  profilanswer
 

jotb a écrit :

tu utilises quel soft pour éditer ton programme ?


kwrite, je connais que ca, a la fac on "travaille" sur mac


---------------
Wenger m'a violé :/
n°769697
jotb
Mon nom est Capitaine.
Posté le 19-06-2004 à 01:01:28  profilanswer
 

iolsi a écrit :

kwrite, je connais que ca, a la fac on "travaille" sur mac


 
ah, tu es sous linux là ?


---------------
L'Europe sera définitivement foutue quand les USA auront gagné la Coupe du Monde de foot...
n°769700
iolsi
UBCT Way Of Life:
Posté le 19-06-2004 à 01:06:46  profilanswer
 

j'ai une partition linux, j'ai rien dessus sauf mastermind.c :sol:


---------------
Wenger m'a violé :/
mood
Publicité
Posté le 19-06-2004 à 01:06:46  profilanswer
 

n°769702
jotb
Mon nom est Capitaine.
Posté le 19-06-2004 à 01:09:41  profilanswer
 

iolsi a écrit :

j'ai une partition linux, j'ai rien dessus sauf mastermind.c :sol:


ok
pour ma part, j'ai réussi à installer cygwin + gcc, je vais pouvoir compiler ton fichier.


---------------
L'Europe sera définitivement foutue quand les USA auront gagné la Coupe du Monde de foot...
n°769704
iolsi
UBCT Way Of Life:
Posté le 19-06-2004 à 01:11:50  profilanswer
 

jotb a écrit :

ok
pour ma part, j'ai réussi à installer cygwin + gcc, je vais pouvoir compiler ton fichier.


on continue en mp pour pas embeter les gens, on est pas sur le topik foot ici :/


---------------
Wenger m'a violé :/
n°769772
cricri_
Posté le 19-06-2004 à 09:00:46  profilanswer
 

iolsi a écrit :

et j'ai lu qu'on pouvait mettre des "fflush(stdin)" partout, c'est préconisé ou pas??


 :o Faîtes en sorte que Taz ne tombe pas là dessus ...  :whistle:

n°769777
jotb
Mon nom est Capitaine.
Posté le 19-06-2004 à 09:47:14  profilanswer
 

Cricri_ a écrit :

:o Faîtes en sorte que Taz ne tombe pas là dessus ...  :whistle:


 
je suis d'accord, le fflush n'est pas quelque chose de magnifiquement portable.


---------------
L'Europe sera définitivement foutue quand les USA auront gagné la Coupe du Monde de foot...
n°769779
cricri_
Posté le 19-06-2004 à 09:56:06  profilanswer
 

C'est surtout que ça ne sert à rien sur stdin ...

n°769781
didier1809
${citation_perso}
Posté le 19-06-2004 à 10:34:24  profilanswer
 

c'est fflush(STDOUT) :o


---------------
.
n°769847
iolsi
UBCT Way Of Life:
Posté le 19-06-2004 à 13:06:31  profilanswer
 

bon bah merci a jotb qui m'a trouvé une macro qui a l'aire de marcher
 
#define CLEAR_STDIN { int c; while((c = getchar()) && (c != '\n')) {} }
 
 
c'est pas la peine de clore le topik, j'aurai surement d'autres problemes (enfin... j'espere pas)
 
merci


---------------
Wenger m'a violé :/
n°769849
iolsi
UBCT Way Of Life:
Posté le 19-06-2004 à 13:07:08  profilanswer
 

Cricri_ a écrit :

C'est surtout que ça ne sert à rien sur stdin ...


ouais ca sert a rien en plus, mais j'avais lu ce truc sur pas mal de sites (et ici :D)


---------------
Wenger m'a violé :/
n°769996
weed
Posté le 19-06-2004 à 18:31:05  profilanswer
 

iolsi a écrit :

bon bah merci a jotb qui m'a trouvé une macro qui a l'aire de marcher
 
#define CLEAR_STDIN { int c; while((c = getchar()) && (c != '\n')) {} }


 
hummm ca c'est sympa ca, ca peut toujours servir
thx

n°770004
iolsi
UBCT Way Of Life:
Posté le 19-06-2004 à 18:50:42  profilanswer
 

weed a écrit :

hummm ca c'est sympa ca, ca peut toujours servir
thx


http://membres.lycos.fr/cultc/astuces.htm


---------------
Wenger m'a violé :/
n°770042
weed
Posté le 19-06-2004 à 21:00:24  profilanswer
 

iolsi, c'est vraiment sympa d'avoir eu le courage de poster ce lien  
je te remercie  
j'ai bookmarké

n°770047
Taz
bisounours-codeur
Posté le 19-06-2004 à 21:16:53  profilanswer
 

bof, tu ferais bien de tester EOF aussi :o

n°770048
Taz
bisounours-codeur
Posté le 19-06-2004 à 21:17:29  profilanswer
 

et la une macro surtout pas comme ça. faite une fonction puisque vous ne savez pas faire de macro


Message édité par Taz le 19-06-2004 à 21:19:30
n°770049
Taz
bisounours-codeur
Posté le 19-06-2004 à 21:19:15  profilanswer
 

en somme cette page ne donne pas de bonne astuce, c'est comme si un paralytique voulait entrainer un courreur

n°770062
iolsi
UBCT Way Of Life:
Posté le 19-06-2004 à 21:38:22  profilanswer
 

weed a écrit :

iolsi, c'est vraiment sympa d'avoir eu le courage de poster ce lien  
je te remercie  
j'ai bookmarké


c'est jotb qui a tout fait, moi je répete [:spamafote]


---------------
Wenger m'a violé :/
n°770063
Taz
bisounours-codeur
Posté le 19-06-2004 à 21:40:21  profilanswer
 

iolsi a écrit :

c'est jotb qui a tout fait, moi je répete [:spamafote]

ça vous intéresse pas mon avis ?

n°770068
Taz
bisounours-codeur
Posté le 19-06-2004 à 21:43:48  profilanswer
 

d'autant plus que virer toute une ligne est assez excessif, par contre sauter le jeton courant  me parait plus sain

n°770083
iolsi
UBCT Way Of Life:
Posté le 19-06-2004 à 22:44:21  profilanswer
 

Taz a écrit :

ça vous intéresse pas mon avis ?


si, malheurusement c'est quasiment du chinois pour moi, tu veux que je rajoute un && (c!=EOF) ???


---------------
Wenger m'a violé :/
n°770085
Taz
bisounours-codeur
Posté le 19-06-2004 à 22:49:32  profilanswer
 

déjà une macro qui a besoin de définir plusieurs instructions, donc un bloc, on la définit __toujours__ avec un  
 

Code :
  1. #define MA_MACRO(X) do { \
  2. instruction1; \
  3. instruction2; \
  4. } while(0)

j'ai bien dit toujours
 
après oui, rajoute un test pour EOF, pas la peine de boucler indéfiniment. ou utilise carrément fgets pourquoi pas. cela dit, si tu compte te servir de ta macro ou fonction par exemple sur une erreur de scanf pour vider la ligne courrante ... ça ne sera pas suffisant, une erreur marque le flux concerné avec un ou des drapeaux d'erreurs, il faudra donc veiller à marquer le flux comme opérationnel, si ça sert à quelque chose (ie. erreur non fatal)


Message édité par Taz le 19-06-2004 à 22:49:48
n°770115
iolsi
UBCT Way Of Life:
Posté le 20-06-2004 à 00:54:53  profilanswer
 

laisse tomber, je crois que tu me surestimmes :D
 
merci quand meme


Message édité par iolsi le 20-06-2004 à 00:55:04

---------------
Wenger m'a violé :/
mood
Publicité
Posté le   profilanswer
 


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

  [C] euh.... Probleme sur un truc pas tres dur (1er post + lisible)

 

Sujets relatifs
[VB6] [WMI] Probleme de connection a un pc distantPHP probleme easyphp et mysql_fetch_array
Probleme de lien sur une image dans une divproblème avec les threads
Probleme de projection en openglProblème d'installation de MS Embedded Visual Tools 3.0
Probleme requete sur 2 tables...[MySQL] problème d'apostrophe [résolu]
Evenement MouseMouve pas tres clairprobleme de jointure
Plus de sujets relatifs à : [C] euh.... Probleme sur un truc pas tres dur (1er post + lisible)


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