Bonsoir,
je suis actuellement en train de réaliser un projet pour mes cours, un mastermind en langage C. Mon problème vient du fait qu'il doit être structuré en sous fonction et que j'ai un peu de mal avec ça.
Voici le structurogramme:



Je rencontre actuellement 2 problèmes:

1) Dans ma fonction verifierCombi, je compare la chaine générée par GenererCombiAleatoire à la chaine ProposerCombi.
J'ai le droit a 10 essais (10 x ProposerCombi donc) donc j'ai fait un do (VerifierCombi) while dans la fonction jeu.

Le problème est dans la fonction VerifierCombi, en effet a chaque nouvelle tentative, j'ai une nouvelle solution (la chaine de Generercombialeatoire) alors que je voudrais avoir une seule solution du début à la fin du jeu.Et j'avoue que je ne sais pas comment remédier à ce problème après avoir planché quelques heures dessus.

2) Mon second problème est que l'utilisateur doit rentrer 2 fois sa combinaison et je ne vois pas d'où cela vient exactement. Je pense que le problème vient de cette ligne de code dans la fonction jeu car quand je la retire je n'ai plus ce problème:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
void jeu()
{
char solution[5],proposition[5],proposition1[5],test1[5];
int essai=1;
GenererCombiAleatoire(solution);
printf("solution : %s\n",solution);
do
{printf("Proposition %d\n",essai);
VerifierCombi(proposition1,test1);
AfficherJeu(&essai);// CETTE LIGNE 
essai++;}
while(essai<=10&&strcmp(proposition1,solution)!=0);
}
Voici le code complet:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
 
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>
 
void AfficherJeu(int *essai);
void VerifierCombi(char * proposition1, char * test1);
void ProposerCombi(char * proposition);
void GenererCombiAleatoire(char * solution);
void jeu();
int main()
{
srand(time(NULL));
jeu();
}
 
 
void jeu()
{
char solution[5],proposition[5],proposition1[5],test1[5];
int essai=1;
GenererCombiAleatoire(solution);
printf("solution : %s\n",solution);
do
{printf("Proposition %d\n",essai);
VerifierCombi(proposition1,test1);
AfficherJeu(&essai);
essai++;}
while(essai<=10&&strcmp(proposition1,solution)!=0);
}
 
/*--------------------------------------------
Création de la fonction qui génère la combinaison aléatoire et qui la renvoye dans jeu*/
 
void GenererCombiAleatoire(char * solution)
{
  char Lettres[7]="RVBJOM";
  int a;
    for(a=0;a<=3;a++)
    solution[a]=Lettres[rand()%6];
    solution[4] = '\0';
}
 
/*---------------------------------------------
Fin de la fonction qui génère la combinaison aléatoire*/
 
/*---------------------------------------------
Début de la fonction qui demande à l'utilisateur de rentrer une proposition*/
void ProposerCombi(char * proposition)
{
 int a;
 
do{scanf("%s",proposition);
for(a=0;a<=3;a++)
proposition[a]=toupper(proposition[a]);
if(strlen(proposition)!=4||proposition[0]!='R'&&proposition[0]!='V'&&proposition[0]!='B'&&proposition[0]!='J'&&proposition[0]!='O'&&proposition[0]!='M'||proposition[1]!='R'&&proposition[1]!='V'&&proposition[1]!='B'&&proposition[1]!='J'&&proposition[1]!='O'&&proposition[1]!='M'||proposition[2]!='R'&&proposition[2]!='V'&&proposition[2]!='B'&&proposition[2]!='J'&&proposition[2]!='O'&&proposition[2]!='M'||proposition[3]!='R'&&proposition[3]!='V'&&proposition[3]!='B'&&proposition[3]!='J'&&proposition[3]!='O'&&proposition[3]!='M')
printf("Combinaison impossible. Recommencez!\n");}
while(strlen(proposition)!=4||proposition[0]!='R'&&proposition[0]!='V'&&proposition[0]!='B'&&proposition[0]!='J'&&proposition[0]!='O'&&proposition[0]!='M'||proposition[1]!='R'&&proposition[1]!='V'&&proposition[1]!='B'&&proposition[1]!='J'&&proposition[1]!='O'&&proposition[1]!='M'||proposition[2]!='R'&&proposition[2]!='V'&&proposition[2]!='B'&&proposition[2]!='J'&&proposition[2]!='O'&&proposition[2]!='M'||proposition[3]!='R'&&proposition[3]!='V'&&proposition[3]!='B'&&proposition[3]!='J'&&proposition[3]!='O'&&proposition[3]!='M');
proposition[4] = '\0';
}
/*---------------------------------------------
Fin de la fonction*/
 
void VerifierCombi(char * proposition1,char *test1)
{
char solution[5],proposition[5],test[5];
int z;
ProposerCombi(proposition);
strcpy(proposition1,proposition);
GenererCombiAleatoire(solution);
 
printf("solution dans verifier combi: %s \n",solution);
for(z=0;z<=3;z++)
                {
        if(proposition[z]==solution[z])//Quand la lettre est au bon endroit dans la combinaison
            test[z]='N';
        else if (proposition[z]!=solution[0]&&proposition[z]!=solution[1]&&proposition[z]!=solution[2]&&proposition[z]!=solution[3])//Quand la lettre n'est pas présente dans la combinaison
            test[z]='.';
        else test[z]='B';//Quand la lettre est présente mais pas à la bonne place
                }
        test[4] = '\0' ;
strcpy(test1,test);
 
//printf("%s\n",test);
}
 
void AfficherJeu(int *essai)
{
char test1[5],proposition1[5];
int z=10,a;
 
VerifierCombi(proposition1,test1);
printf("%s\n",test1);
printf("____________________________________________");
for(z=10;z>=*essai+1;z--)
printf("\n[[%2d]-[ (*) (*) (*) (*) ] [ [.] [.] [.] [.] ]",z);
printf("\n");
printf("[[%2d]-[ ",*essai);
for(a=0;a<=3;a++)
printf("(%c) ",proposition1[a]);
printf("] ");
printf("[ [%c] [%c] [%c] [%c] ]",test1[0],test1[1],test1[2],test1[3]);
}
 
/*Probleme avec Afficherjeu dans la fonction jeu, elle fait que je doit rentrer 2 fois ma proposition
Probleme avec Generercombialeatoire, il crée une nouvelle combinaison a chaque fois
*/
Si je me suis mal exprimé ou que vous avez des questions à propos de mon code n'hésitez surtout pas.

Merci d'avance à ceux qui m'aideront.