Bonjour,


je suis en train de regarder ça > http://www.cplusplus.com/doc/tutorial/preprocessor/

Dans le but de définir un boolean dans les instructions du préprocesseur.

J'ai fait une tentative, l'objectif étant de définir boolean, si il n'est pas encore définit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
#ifndef bool					// si non définit, définit boolean
#define bool					// est-ce que je devrais pas indiquer un "int" quelques parts?
#define TRUE 1
#define FALSE 0
#endif							// !boolean
Mais cette tentative n'a pas trop l'air de marcher, ayant de message d'erreur comme quoi mes variables ne sont pas définies à la compilation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
MysteryBox.c(31): error C2065: 'continuerPartie'*: identificateur non déclaré
MysteryBox.c(56): warning C4028: paramètre formel 1 différent de la déclaration
MysteryBox.c(56): warning C4028: paramètre formel 2 différent de la déclaration
MysteryBox.c(56): error C2146: erreur de syntaxe*: absence de ';' avant l'identificateur 'GameMstBx'
MysteryBox.c(59): error C2065: 'continuerPartie'*: identificateur non déclaré
MysteryBox.c(133): warning C4028: paramètre formel 1 différent de la déclaration
MysteryBox.c(133): warning C4028: paramètre formel 2 différent de la déclaration
MysteryBox.c(264): error C2065: 'statusG'*: identificateur non déclaré
MysteryBox.c(270): error C2065: 'statusG'*: identificateur non déclaré
MysteryBox.c(274): error C2065: 'statusG'*: identificateur non déclaré
MysteryBox.c(278): error C2065: 'statusG'*: identificateur non déclaré
MysteryBox.c(282): error C2065: 'statusG'*: identificateur non déclaré
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
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
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#ifndef bool					// si non définit, définit boolean
#define bool					// est-ce que je devrais pas indiquer un "int" quelques parts?
#define TRUE 1
#define FALSE 0
#endif							// !boolean
 
//déclaration des fonctions secondaires
void CopFichier(FILE *fileBuffer);
int DispTitle(void);
 
int MenuLvl(void);
void ChooseLvl(int *MIN, int *MAX);
 
int YourNumb(const int MIN, const int MAX);
int TestNumb(int myNumb, const int nbrMystere);
void ScoreTab(const int nbrMystere, int compteur);
void GameMstBx(const int MIN, const int MAX);
 
int MenuRestart(void);
bool RestartGame(void);
 
void PauseApp(void);
 
// ==================== FONCTION MAIN ====================
int main() {
	int status = 0;
	bool continuerPartie = FALSE;
 
	//declaration des constantes
	int MIN, MAX;
 
	int *pMIN, *pMAX;
	pMIN = &MIN;
	pMAX = &MAX;
 
	//initialisation du générateur de nombre aléatoire
	srand(time(NULL));
 
	// affichage du titre du jeux
	status = DispTitle();
 
	//stop le programme en cas d'erreur
	if (status == 1) return 1;
 
	//Boucle de partie
	do
	{
		//choix du niveau de jeux
		void ChooseLvl(int pMIN, int pMAX)
 
		//début de la partie
		GameMstBx(MIN, MAX);
 
		//recommencer une partie
	} while ((continuerPartie = RestartGame()) == TRUE);
 
	// Pause avant la fin du programme
	PauseApp();
 
	//fin du programme
	return 0;
 
}
 
// ==================== FONCTION SECOND ====================
// imprime écran le contenu du buffer
void CopFichier(FILE *fileBuffer) {
	// déclaration des variable
	char copyStr[257 + 1];
 
	//impression du contenu du document
	while (fgets(copyStr, sizeof(copyStr), fileBuffer) != NULL)
		printf("%s", copyStr);
}
 
// fonction affichant le titre:
int DispTitle(void) {
	// déclaration des pointeurs
	char *filename = "./title.txt";
	FILE *fileBuffer;
 
	// ouverture vérification du flux
	if ((fileBuffer = fopen(filename, "r")) == NULL) {
		fprintf(stderr, "Erreur - Echec de l'ouverture du fichier %s en mode lecture!", filename);
		// retour valeur sentinelle - une erreur s'est produite
		return 1;
	}
 
	//Impression écran du message
	fputs("Bienvenu dans \n",stdout);
	CopFichier(fileBuffer);
	fputs("\n\n", stdout);
 
	// fermeture du flux
	fclose(fileBuffer);
 
	// retour valeur sentinelle - tout c'est bien passé
	return 0;
}
 
//fonction affichant le menu
int MenuLvl(void) {
	//initialisation des variables
	char entreeCl[10 + 1];
	int choixLvl = 1, status;
 
	fputs("Choississez le niveau de votre partie: \n", stdout);
	fputs("1. Facile\n", stdout);
	fputs("2. Moyen\n", stdout);
	fputs("3. Difficile\n", stdout);
 
	while (1)
	{
		fputs("Votre choix : ", stdout);
		fgets(entreeCl, 10 + 1, stdin);
		status = sscanf(entreeCl, "%d", &choixLvl);
 
		// "if" casse la boucle, si les conditions sont remplies
		if (status == 1 && choixLvl >= 1 && choixLvl <= 3) break;
 
		// message d'erreur s'affichant si la boucle "if" n'est pas activé
		fputs("Entree incorrect - Entrez le choix 1, 2 ou 3.\n", stdout);
	}
 
	return choixLvl;
}
 
//fonction menu permettant de choisir son niveau
void ChooseLvl(int *pMIN, int *pMAX) {
 
	switch (MenuLvl())
	{
	case 1:
		printf("Vous avez choisi le niveau de difficulté : Facile");
		*pMIN = 1;
		*pMAX = 10;
		break;
	case 2:
		printf("Vous avez choisi le niveau de difficulté : Moyen");
		*pMIN = 1;
		*pMAX = 100;
		break;
	case 3:
		printf("Vous avez choisi le niveau de difficulté : Difficile");
		*pMIN = 1;
		*pMAX = 1000;
		break;
	default:
		printf("Vous avez choisi le niveau de difficulté : Facile");
		*pMIN = 1;
		*pMAX = 10;
		break;
	}
}
 
// fonction demandant la réponse
int YourNumb(const int MIN, const int MAX) {
	char retourCl[10 + 1];
	int myNumb, status;
 
	while (1)
	{
		printf("Entrez un nombre entre %d et %d : ", MIN, MAX);
		fgets(retourCl, 10 + 1, stdin);
		status = sscanf(retourCl, "%d", &myNumb);
 
		// "if" casse la boucle, si ses conditions sont remplies
		if (status == 1 && myNumb >= MIN && myNumb <= MAX) break;
 
		// message d'erreur s'affichant si la boucle "if" n'est pas activé
		fputs("Entree incorrect - Entrez un nombre compris entre 0 et 100!\n", stdout);
	}
 
	return myNumb;
}
 
//fonction donnant un indice
int TestNumb(int myNumb, const int nbrMystere) {
	if (myNumb < nbrMystere)
	{
		fputs("C'est plus!\n", stdout);
		return 0;
	}
	else if (myNumb > nbrMystere)
	{
		fputs("C'est moins!\n", stdout);
		return 0;
	}
	else
	{
		fputs("Bravo! vous avez trouvez le nombre mystere\n", stdout);
		return 1;
	}
}
 
//fonction affichant le résultat du joueur
void ScoreTab(const int nbrMystere, int compteur) {
	fputs("===== RESULTAT DE PARTIE =====\n", stdout);
	printf("Le nombre mystere etait : %d \n", nbrMystere);
	printf("Nombre de tour: %d \n", compteur);
}
 
//fonction commençant la partie
void GameMstBx(const int MIN,const int MAX) {
	// playerAnswer		- variable stockant la réponse du joueur
	// nbrMystere		- variable stockant le nombre généré aléatoirement
	int playerAnswer, nbrMystere;
 
	// gameWin			- variable définissant la condition du jeux (1 = gagné)
	// compteur			- variable comptant le nombre de tour
	int gameWin = 0, compteur = 0;
 
	//attribution d'un nombre généré aléatoirement
	nbrMystere = (rand() % (MAX - MIN + 1)) + MIN;
 
	//boucle de partie
	do
	{
		//compte le nombre de tour
		compteur++;
 
		//fonction récupérant la réponse du joueur
		playerAnswer = YourNumb(MIN, MAX);
 
		//fonction testant la réponse du joueur
		gameWin = TestNumb(playerAnswer, nbrMystere);		
	} while (gameWin == 0);
 
	// fonction affichant les résultats de partie
	ScoreTab(nbrMystere, compteur);
}
 
//fonction affichant le menu pour recommencer une partie
int MenuRestart(void) {
	//initialisation des variables
	char entreeCl[10 + 1];
	int rePartie = 1, status;
 
	fputs("Voulez-vous recommencer une partie: \n", stdout);
	fputs("1. OUI\n", stdout);
	fputs("2. NON\n", stdout);
 
	while (1)
	{
		fputs("Votre choix : ", stdout);
		fgets(entreeCl, 10 + 1, stdin);
		status = sscanf(entreeCl, "%d", &rePartie);
 
		// "if" casse la boucle, si les conditions sont remplies
		if (status == 1 && rePartie >= 1 && rePartie <= 2) break;
 
		// message d'erreur s'affichant si la boucle "if" n'est pas activé
		fputs("Entree incorrect - Entrez le choix 1 ou 2.\n", stdout);
	}
 
	return rePartie;
}
// fonction permettant de recommencer la partie
bool RestartGame(void) {
	bool statusG;
 
	switch (MenuRestart())
	{
	case 1:
		fputs("Début d'une nouvelle partie!\n", stdout);
		statusG = TRUE;
		break;
	case 2:
		fputs("Au revoir!\n", stdout);
		statusG = FALSE;
		break;
	default:
		fputs("Au revoir!\n", stdout);
		statusG = FALSE;
		break;
	}
 
	return statusG;
}
 
// fonction de pause du programme - demande une validation pour continuer
void PauseApp(void) {
	do {
		fputs("Appuyez sur 'Entree' pour terminer le programme. \n", stdout);
	} while (getchar() != '\n');
 
}

J'ai aussi un peu regardé sur le net, ce qui s'en dit: https://stackoverflow.com/questions/...an-values-in-c
> Il n'y a pas d'autre méthode que la 1,2 et 3, pour le définir en instruction du préprocesseur?
> pour l'option 4 (stdbool.h), à part le fait que le compilateur doit être compatible, y a-t-il d'autres incidence?


Merci d'avance pour votre aide,
Red'