Bonjour,
je debute dans la programmation en C. J'ai réalisé ce petit et trés simple mastermind, pour mettre en pratique le code. Cependant, j'aimerais avoir vos commentaires (et critiques) sur ce programme. J'ai notamment des doutes sur la fonction de saisie.
Merci.

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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
 
#include <stdio.h>
 
#include <stdlib.h>
#include <time.h>
 
 
#define COUP_MAX    10      // Nombre de coup Maximal
#define NB_CHIFFRE  5       // Nombre de chiffre dans le code
#define BORNE_MAX   10      // Borne superieur du hasard
 
 
// Different entrees pour le menu d'affichage
#define RESULTAT    'r'
#define GAGNE       'g'
#define PERDU       'p'
#define MENU        'm'
 
 
// Fonctions externes
int hasard ();
void saisie (int ROW);
void teste (int i, int ROW);
void affichage(char mode, int ROW);
void init_res ();
 
 
// Variables externes
int essai[COUP_MAX][NB_CHIFFRE];        // Tableau conteant les combinaisons essayees
char res[COUP_MAX][NB_CHIFFRE];         // Tableau contenant les resultats de chaques combinaisons
int code[NB_CHIFFRE];                   // Tableau contenant le code a decouvrir
int bon;                                // Indique le nombre de chiffre correctement decode
 
 
// Programme principal
int main()
 
{
    int ROW;                        // Indique la ligne en cours de traitement
    int coup;                       // Indique le nombre de coup joue
    int i;
 
 
    coup = 1;
    ROW = 0;
 
    // initialise le tableau RES
    init_res ();
 
    // Generation du code aleatoire
    srand(time(NULL));
    for (i = 0; i < NB_CHIFFRE; i++)
        code[i] = hasard();
 
    // Affichage du menu
    affichage(MENU,0);
 
    // Test de l'essai
    do {
        saisie(ROW);
        bon = 0;
        for (i = 0; i < NB_CHIFFRE; i++) {
            teste(i,ROW);
        }
        affichage(RESULTAT,ROW);
 
        ROW++;
        coup++;
    }
    while (bon != NB_CHIFFRE && coup <= COUP_MAX);
 
 
    if (bon == NB_CHIFFRE)
        affichage(GAGNE,0);
    else
        affichage(PERDU,0);
 
 
    return 0;
}
 
 
 
// FONCTION INITIALISATION DU TABLEAU RESULTAT
void init_res () {
 
    int i,j;
 
    for (j = 0; j < COUP_MAX; j++)
        for (i = 0; i < NB_CHIFFRE; i++) {
            res[j][i] = '.';
        }
}
 
 
// FONCTION HASARD
int hasard() {
 
    return rand() % BORNE_MAX;
 
}
 
 
// FONCTION DE SAISIE DE LA COMBINAISON
void saisie (int ROW) {
 
 
    int i;
    char c;
    char chaine[20];
 
    printf("\nEntrez votre combinaison : ");
    for (i = 0; (c = getchar()) != EOF && c != '\n'; i++) {
        chaine[i] = c;
    }
 
    sscanf(chaine, "%d %d %d %d %d", &essai[ROW][0], &essai[ROW][1], &essai[ROW][2], &essai[ROW][3],&essai[ROW][4] );
 
}
 
 
// FONCTION TEST
void teste (int i, int ROW) {
 
    int j;
 
    if (essai[ROW][i] == code[i]) {
        bon++;
        res[ROW][i] = '#';
    }
 
    else
        for(j = 0; j < NB_CHIFFRE; j++)
            if (essai[ROW][i] == code[j])
                res[ROW][i] = '*';
}
 
 
// FONCTION AFFICHAGE
void affichage(char mode, int ROW) {
 
    int i, j;
 
    switch (mode) {
        case 'r' :
            system("clear");
            for (j = 0; j <= ROW; j++) {
                for (i = 0; i < NB_CHIFFRE; i++)
                    printf("%d ", essai[j][i]);
                printf("\t");
                for (i = 0; i < NB_CHIFFRE; i++)
                    printf("%c ", res[j][i]);
                printf("\n");
            }
            break;
 
        case 'p' :
            printf("\nPERDU, le code correct etait :\t");
            for (i = 0; i < NB_CHIFFRE; i++)
                printf("%d ", code[i]);
            printf("\n\n");
            break;
 
        case 'g' :
            printf("\nGAGNE, le code etait bien :\t");
            for (i = 0; i < NB_CHIFFRE; i++)
                printf("%d ", code[i]);
            printf("\n\n");
            break;
 
        case 'm' :
            printf("\t*****************************\n");
            printf("\t*                           *\n");
            printf("\t*        MASTERMIND         *\n");
            printf("\t*                           *\n");
            printf("\t*****************************\n");
            printf("\n\n");
            printf(" - Utilisez les combinaisons dans le style : a b c d e puis 'entree'\n");
            printf(" - Les nombres possibles sont compris entre 0 et 9");
            printf("\n\n");
            break;
 
    }
}