Probleme Mastermind

Fermé
leylee - Modifié par NHenry le 3/01/2017 à 20:45
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 4 janv. 2017 à 16:53
Bonjour, je suis débutant en matière de programmation et je suis en train de programmer un jeu de mastermind. Le compilateur ne me donne aucune erreur, cependant lors de lecture le programme semble ne pas aller jusqu'au bout: Il ne prend meme pas encompte des instructions simple comme "while"...voici mon code, si vouc pouviez m'aider je vous en serais reconnaissant parceque je perd la boule.......


#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
#include <math.h>


//Le joueur saisis la combinaison
int SaisirCombi( int NC )
  {

int combi_joueur[8];
     int ind;



for (ind=1;ind<=NC;ind=ind+1)
       {
        printf("Choisir une des couleurs, en tapant le numero de la couleur");
        scanf("%d",&combi_joueur[ind]);
       }
    return combi_joueur  ;
  }

//L'ordinateur tire la combinaison aléatoire
 int TirerCombi(int NC, int N)
  {
      int combi_ordi[8];
      int ind;



for(ind=1;ind<=NC;ind=ind+1)
      {
          combi_ordi[ind]= (int)((N+1-0.0001)*rand()/RAND_MAX);
      }
      return combi_ordi


;


}

// l'ordi Compare
int ComparerCombi(int combi_ordi[],int combi_joueur[],int NC)
{
int Nb_bienplace;
int Nb_malplace;
int i;
int j;

Nb_bienplace=0;
Nb_malplace=0;
for (i=1;i<=NC;i=i+1)
  {
      if ( combi_ordi[i]=combi_joueur[i] )
      {
          Nb_bienplace = Nb_bienplace+1;
          Nb_malplace=Nb_malplace+1;
          combi_ordi[i]=10;
          combi_joueur[i]=11;
      }
  }



}


//Programme principale
int main()
{
     int N;
     int NC;
     int combi_ordi[8];
     int combi_joueur[8];
     int Nb_bienplace;
     int Nb_malplace;
     int Nb_coups;
     int Gagne;
     long int u;


time(&u);
     srand(u);

printf("Choisir le nombre de couleurs compris entre 4 et 8");
     scanf("%d",&N);
     while (N<4 && N>8)
     {
     printf("Choisir le nombre de couleurs compris entre 4 et 8");
     scanf("%d",&N);
     }

printf("Choisir le nombre de pions de la combinaison entre 3 et 6");
     scanf("%d",&NC);
     TirerCombi(NC,N);
     while (NC<3 && NC>6)
     {
     printf("Choisir le nombre de couleurs compris entre 3 et 6");
     scanf("%d",&NC);
     }

Gagne=0;
     Nb_coups=0;
     while ( Gagne=0 && Nb_coups<20)
      {
          SaisirCombi(NC);
          Nb_coups=Nb_coups+1;
          ComparerCombi(combi_ordi,combi_joueur, NC);
          printf("Le nb de couleur bien placé est de %d/n",Nb_bienplace);
          printf("Le nb de couleur bien mal est de %d/n",Nb_malplace);
          if (Nb_bienplace=N )
          {
              Gagne=1;
              printf("Vous avez gagné!");
          }
      }
if (Gagne=0)
{
    printf("tu as perdu, essaye encore !");
}

return 0;
}


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

1 réponse

[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 4/01/2017 à 14:28
Salut,

Une compilation de ton code avec les warnings parle pas mal :

$ gcc -Wall leylee.c
leylee.c: In function ‘SaisirCombi’:
leylee.c:21:2: warning: return makes integer from pointer without a cast
return combi_joueur ;
^
leylee.c:21:2: warning: function returns address of local variable [-Wreturn-local-addr]
leylee.c: In function ‘TirerCombi’:
leylee.c:36:2: warning: return makes integer from pointer without a cast
return combi_ordi
^
leylee.c:36:2: warning: function returns address of local variable [-Wreturn-local-addr]
leylee.c: In function ‘ComparerCombi’:
leylee.c:56:3: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
if ( combi_ordi[i]=combi_joueur[i] )
^
leylee.c:50:6: warning: unused variable ‘j’ [-Wunused-variable]
int j;
^
leylee.c: In function ‘main’:
leylee.c:84:2: warning: implicit declaration of function ‘time’ [-Wimplicit-function-declaration]
time(&u);
^
leylee.c:106:2: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
while ( Gagne=0 && Nb_coups<20)
^
leylee.c:113:3: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
if (Nb_bienplace=N )
^
leylee.c:119:2: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
if (Gagne=0)
^
leylee.c: In function ‘ComparerCombi’:
leylee.c:67:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
leylee.c: In function ‘main’:
leylee.c:112:3: warning: ‘Nb_malplace’ may be used uninitialized in this function [-Wmaybe-uninitialized]
printf("Le nb de couleur bien mal est de %d/n",Nb_malplace);
^


Dal
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 4/01/2017 à 16:56
corrige ton code avec l'aide de ces warnings, jusqu'à ce que qu'il soit propre d'erreurs et de warnings (avec gcc active l'option -Wall), une fois que cela sera fait, on verra les autres erreurs de conception, de logique ou autres que le compilateur ne signale pas (reposte alors ton code corrigé)

si vraiment tu ne comprends pas la raison d'un Warning ou ce qu'il signifie après avoir cherché par toi même, pose la question ici

une des erreurs très visible résulte du fait que que l'opérateur de comparaison d'égalité de nombres entiers en C est
==
et non
=
qui opère une affectation et que tu utilises par erreur dans tes if / while

Dal
0