Bonjour à tous,j'ai trouvé un petit exercice à faire sur un site.

Cependant j'ai un programme à l'éxécution,le programme ne fonctionne pas comme il faut.

Explications: J'ai un fichier texte "dico.txt" dans lequel se trouve des mots "tirés au sort" pour le jeu. Là pas de problème.

J'avais commencé par créer plusieurs fichiers (.c,.h) mais l'éxécutable ne fonctionnant pas j'ai décidé de coder dans un seul fichier "pendu.c".

Il est composé de mon main puis de 4 autres petites fonctions.

Quand je compile,aucune erreur. Mais quand je lance l'éxécutable,seul mon premier printf s'affiche et ensuite on dirait que je rentre dans une boucle infinie,j'ai beau taper sur n'importe quelle touche,le programme ne s'arrête pas ni n'évolue.

Si vous avez le temps de m'aider,c'est gentil.Merci d'avance !

Voici le code :

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
 
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <time.h>
 
int gagne(int lettreTrouvee[],int longueurMot);
int rechercheLettre(char lettre,char motPioche[],int lettreTrouvee[]);
int piocherMot(char motPioche[]);
int nombreAleatoire(int nombreMax);
 
 
int main(int argc,char *argv[])
{
	char motPioche[100];
	int essaisRestants=10;
	int i=0;
	char lettre=0;
	int longueurMot=0;
	int* lettreTrouvee=NULL;
 
	printf("Bienvenue dans le jeu du pendu\n");
 
	if(!piocherMot(motPioche))
		exit(0);
 
	longueurMot=strlen(motPioche);
	printf("%d",longueurMot);
 
	lettreTrouvee=(int*)malloc(longueurMot * sizeof(int));
 
	if(lettreTrouvee == NULL)
		printf("Erreur lors de l'allocation du tableau des lettres trouvées\n");
	for(i=0;i<longueurMot;i++)
	{
		lettreTrouvee[i] = 0;
	}
 
	while(essaisRestants > 0 && !gagne(lettreTrouvee,longueurMot))
	{
		printf("Il vous reste encore %d essais\n",essaisRestants);
		printf("Quel est le mot secret ?");
 
		for(i=0;i<longueurMot;i++)
		{
			if(lettreTrouvee[i])
				printf("%c",motPioche[i]);
			else
				printf("*");
		}
 
		printf("Proposez une lettre\n"),
 
		lettre=getchar();
 
		if(!rechercheLettre(lettre,motPioche,lettreTrouvee))
			essaisRestants --;
	}
	if(gagne(lettreTrouvee,longueurMot))
		printf("Bravo le mot secret est bien %s",motPioche);
	else
		printf("Désolé vous avez perdu,le mot secret était %s",motPioche);
	free(lettreTrouvee);
	return 0;
}
 
int gagne(int lettreTrouvee[],int longueurMot)
{
	int i=0;
	int joueurGagne = 1;
 
	for(i=0;i<longueurMot;i++)
	{
		if(lettreTrouvee[i]==0)
			joueurGagne=0;
	}
	return joueurGagne;
}
 
int rechercheLettre(char lettre,char motPioche[],int lettreTrouvee[])
{
	int i=0;
	int bonneLettre=0;
 
	for(i=0;motPioche[i] != '\0';i++)
	{
		if(lettre==motPioche[i])
		{
			lettreTrouvee[i]=1;
			bonneLettre=1;
		}
	}
	return bonneLettre;
}
int piocherMot(char motPioche[])
{
	int nombreMots,numMotChoisi=0;
	int caractereActuel=0;
	FILE* dico=NULL;
	dico=fopen("dico.txt","r");
 
	if(dico == NULL)
	{
		printf("Erreur lors de l'ouverture du dictionnaire\n");
		return 0;
	}
 
	do
	{
		caractereActuel=fgetc(dico);
		if(caractereActuel =='\n')
			nombreMots++;
	}while(caractereActuel != EOF);
 
	numMotChoisi=nombreAleatoire(nombreMots);
 
	rewind(dico);
 
	while(numMotChoisi >0)
	{
		caractereActuel=fgetc(dico);
		if(caractereActuel == '\n')
			numMotChoisi--;
	}
	fgets(motPioche,100,dico);
 
	motPioche[strlen(motPioche)-1]='\0';
	fclose(dico);
	return 1;
}
 
int nombreAleatoire(int nombreMax)
{
    srand(time(NULL));
    return (rand() % nombreMax);
}