Bonjour ceci est mon 1er message sur ce forum et je suis novice en programmation, dans le cadre de ma formation on m'a demandé de réaliser un pendu en C, la compilation se passe à merveille et malheureusement à l'exécution au bout de quelques secondes windows 7 coupe mon programme. (je présume une de ces fameuses "segmentation fault" mais je n'arrive pas à trouver son origine. J'ai indenté et commenté mon code de manière à ce qu'il soit le plus lisible possible, merci d'avance pour vôtre aide.

PS : Je sais qu'il y'a des milliers d'algos de pendus en C sur le net mais je veux pas copier-coller, je veux comprendre pourquoi le mien ne marche pas.

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
 
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
 
int Iwin(char shadowTab[], char motSecret[]);
char lireCaractere();
int chercheLettre(int boolTab[] , char motSecret[],char lettre);
char retourneTableau(char shadowTab[] , char motSecret[], char boolTab[] );
 
 
char lireCaractere()
{
    char caractere = 0;
 
    caractere = getchar(); // On lit le premier caractère
    caractere = toupper(caractere); // On met la lettre en majuscule si elle ne l'est pas déjà
 
    // On lit les autres caractères mémorisés un à un jusqu'à l'\n
    while (getchar() != '\n') ;
 
    return caractere; // On retourne le premier caractère qu'on a lu
}
 
 
int Iwin(char shadowTab[], char motSecret[])
{
    int i = 0;
    int value = 0;
    for(i=0; motSecret[i] != '\0'; i++)
    {
        value =1;
        if(motSecret[i] != shadowTab[i])
        value =0;
    }
    return value;
}
 
int chercheLettre(int boolTab[] , char motSecret[],char lettre)
{
    int i =0;
    for(i=0; (motSecret[i] != '\0'); i++)
    {
        if(motSecret[i]== lettre)
        boolTab[i]= 1;
        else
        boolTab[i]= 0;
    }
    return boolTab;
}
 
 
char retourneTableau(char shadowTab[] , char motSecret[], char boolTab[] )
{
    int i =0;
    while(motSecret[i] !='\0')
    {
        if(boolTab[i]==1) //si boolTab est à 1 on révèle une lettre au joueur.
        shadowTab[i]=motSecret[i];
        else
        shadowTab[i]='*';
        i++;
    }
     return shadowTab;
}
 
 
int main()
{
    char motSecret[20]="ROUGE"; //mot secret du pendu, invisible au joueur.
    char shadowTab[20]="*****"; //tableau affiché à l'écran du joueur
    int boolTab[20] = {0}; // tableau booléen qui servira à réveler ou non les lettres sur le tableau affiché à l'écran du joueur.
    int compteCoups = 10;
    int winner = 0;
    char lettre;
 
    while((compteCoups !=0) && (winner !=1) )
    {
 
        printf("le mot secret est %s \n",shadowTab);
        printf("Il vous reste %d Coups saisissez une lettre \n", compteCoups);
        compteCoups--;
        lettre = lireCaractere();
        boolTab[20] = chercheLettre(boolTab,motSecret,lettre);
        shadowTab[20] = retourneTableau(shadowTab, motSecret, boolTab);
        winner = Iwin(shadowTab[20],motSecret);
 
    }
 
    if(winner == 1)shadowTab
    {
        printf("c'est win");
    }
    else
    {
        printf("c'est loose");
    }
 
    return 0;
}