Difficultés-pour-faire-marcher-mon-programme
Fermé
Dede-du-78
-
13 août 2014 à 18:40
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 5 sept. 2014 à 20:18
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 5 sept. 2014 à 20:18
A voir également:
- Difficultés-pour-faire-marcher-mon-programme
- Programme demarrage windows 10 - Guide
- Comment faire marcher chromecast - Guide
- Désinstaller programme windows 10 - Guide
- Forcer la fermeture d'un programme - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
3 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
13 août 2014 à 22:02
13 août 2014 à 22:02
Bonjour,
Ton compilateur ne doit pas être bien réglé (au hasard, je dirais qu'il ne remonte pas les warnings). Car, il y a plusieurs problèmes.
char tailleMotSecret = 0;
Ce n'est pas une erreur, mais je te conseille d'utiliser un int (ou unsigned int), voire short int, sauf si la place est très importante pour toi.
currentWord = malloc(tailleMotSecret * sizeof(char));
Attention, il ne faut pas oublier le '\0' en fin de chaîne. Donc, il faut allouer tailleMotSecret+1
currentWord = dissimulerMot(motSecret, tailleMotSecret);
Fuite de mémoire. Tu récris sur le pointeur qui contient l'adresse d'une zone allouée sans faire de free. Tu t'es mélangé les pinceaux aussi avec les arguments. Tu mets motSecret en argument alors que selon ta fonction, il s'agit du motDissimulé. Le plus simple serait que ta fonction prenne 3 arguments.
Et dans la fonction, tu écris dans motDissimule.
ATtention, si tu fais char dissimulerMot(...); cela renvoie un char. Donc, tu ne peux pas écrire dans un char*...
motDissimuler[i] = "*";
motDissimuler[i] est de type char, tandis que "*" est de type char*. Tu ne peux donc pas faire ça. Pour écrire l'astérisque, il faut le mettre en apostrophe '*' (et non entre guillemets "*").
Dans la fonction ajouterMaLettre(), il faudrait plutôt écrire la lettre trouvée que mettre les étoiles (qui sont déjà mise avec la fonction motDissimuler()).
char lireCaractere()
Ce serait mieux un int (getchar() renvoie un int et non un char).
Il doit rester des erreurs. Mais je te conseille déjà de tout revoir et je referai éventuellement une passe.
Merci de reposter ton code corrigé entre deux balises "code c". Exemple :
<"code c">/*ici tu mets ton code*/<"/code"> (sans les guillemets).
Cdlt,
Ton compilateur ne doit pas être bien réglé (au hasard, je dirais qu'il ne remonte pas les warnings). Car, il y a plusieurs problèmes.
char tailleMotSecret = 0;
Ce n'est pas une erreur, mais je te conseille d'utiliser un int (ou unsigned int), voire short int, sauf si la place est très importante pour toi.
currentWord = malloc(tailleMotSecret * sizeof(char));
Attention, il ne faut pas oublier le '\0' en fin de chaîne. Donc, il faut allouer tailleMotSecret+1
currentWord = dissimulerMot(motSecret, tailleMotSecret);
Fuite de mémoire. Tu récris sur le pointeur qui contient l'adresse d'une zone allouée sans faire de free. Tu t'es mélangé les pinceaux aussi avec les arguments. Tu mets motSecret en argument alors que selon ta fonction, il s'agit du motDissimulé. Le plus simple serait que ta fonction prenne 3 arguments.
void dissimulerMot(char *motSecret, int tailleMotSecret, char *motDissimule);
Et dans la fonction, tu écris dans motDissimule.
ATtention, si tu fais char dissimulerMot(...); cela renvoie un char. Donc, tu ne peux pas écrire dans un char*...
motDissimuler[i] = "*";
motDissimuler[i] est de type char, tandis que "*" est de type char*. Tu ne peux donc pas faire ça. Pour écrire l'astérisque, il faut le mettre en apostrophe '*' (et non entre guillemets "*").
Dans la fonction ajouterMaLettre(), il faudrait plutôt écrire la lettre trouvée que mettre les étoiles (qui sont déjà mise avec la fonction motDissimuler()).
char lireCaractere()
Ce serait mieux un int (getchar() renvoie un int et non un char).
Il doit rester des erreurs. Mais je te conseille déjà de tout revoir et je referai éventuellement une passe.
Merci de reposter ton code corrigé entre deux balises "code c". Exemple :
<"code c">/*ici tu mets ton code*/<"/code"> (sans les guillemets).
Cdlt,
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
Modifié par fiddy le 14/08/2014 à 23:19
Modifié par fiddy le 14/08/2014 à 23:19
Ah :-). On y voit plus clair, ne trouves-tu pas ?
void dissimulerMot(char motADissimuler[], int tailleMotADissimuler, char* motDissimule)
{
int i;
motDissimule = motADissimuler;
for(i = 0; i < tailleMotADissimuler; i++)
{
motDissimule[i] = '*';
}
}
Je te conseille vraiment de choisir les mêmes noms ou des noms très similaires. Par exemple : void dissimulerMot(char *motSecret, int taille, char *currentWord) {...
Sinon c'est le bordel, et on se mélange.
Sinon, motDissmule (donc currentWord) va pointer sur motADissimuler (donc motSecret). Du coup, si tu fais motDissimule[i]='*', tu récris sur motADissimuler. Donc, ton mot secret comportera des astérisques.
Algorithmiquement, il y a plus logique.
Pas besoin de motSecret pour afficher des étoiles dans currentWord.
D'ailleurs pour info, il y a une fonction qui existe déjà : memcpy().
De même pour calculer la longueur d'une chaîne, tu as la fonction strlen().
void ajouterMaLettre(char motADissimuler[], int tailleMotDissimuler, char lettreInterdite, char motDissimule)
{
Pourquoi lettreInterdite ? C'est pas une lettre interdite, mais la lettre choisie par l'utilisateur, c'est-à-dire celle qu'il faut afficher. Autant l'appeler maLettre. char motDissimule, je t'ai dit qu'il faut rajouter un astérisque devant motDissimule (char *motDissimule), sinon ça ne marchera pas.
L'algorithme est à revoir également.
Il suffit de dire :
char caractere = 0;
caractere doit être de type int...
Google is your friend
void dissimulerMot(char motADissimuler[], int tailleMotADissimuler, char* motDissimule)
{
int i;
motDissimule = motADissimuler;
for(i = 0; i < tailleMotADissimuler; i++)
{
motDissimule[i] = '*';
}
}
Je te conseille vraiment de choisir les mêmes noms ou des noms très similaires. Par exemple : void dissimulerMot(char *motSecret, int taille, char *currentWord) {...
Sinon c'est le bordel, et on se mélange.
Sinon, motDissmule (donc currentWord) va pointer sur motADissimuler (donc motSecret). Du coup, si tu fais motDissimule[i]='*', tu récris sur motADissimuler. Donc, ton mot secret comportera des astérisques.
Algorithmiquement, il y a plus logique.
void dissimulerMot (char *currentWord) { int i; for (i=0; i<taille; i++) { currentWord[i]='*'; } }
Pas besoin de motSecret pour afficher des étoiles dans currentWord.
D'ailleurs pour info, il y a une fonction qui existe déjà : memcpy().
De même pour calculer la longueur d'une chaîne, tu as la fonction strlen().
void ajouterMaLettre(char motADissimuler[], int tailleMotDissimuler, char lettreInterdite, char motDissimule)
{
Pourquoi lettreInterdite ? C'est pas une lettre interdite, mais la lettre choisie par l'utilisateur, c'est-à-dire celle qu'il faut afficher. Autant l'appeler maLettre. char motDissimule, je t'ai dit qu'il faut rajouter un astérisque devant motDissimule (char *motDissimule), sinon ça ne marchera pas.
L'algorithme est à revoir également.
Il suffit de dire :
Ce n'est pas plus compliqué :-).
On parcourt motSecret
Si motSecret[i] vaut maLettre Alors on affiche la lettre dans currentWord.
char caractere = 0;
caractere doit être de type int...
Google is your friend
caractere doit être de type int...
caractere va remplacer maLettre après utilisation de la fonction. maLettre est de type char cela serait mieux de mettre caractere de type char et comme la fonction lireCaractere retourne caratere elle doit être elle aussi de type char je pense. Sinon on met également maLettre de type int mais vu qu'il va venir se placer dans currentWord qui est de type char... Mais bon, j'ai quand meme mis caractere et la fonction de type int parce que vous m'avez dit que c'est à cause du getchar() or je ne connais pas trop cette fonction c'était la première fois que je l'utilisait.
Sinon on y est presque... Le programme se lance correctement mais il ne fonctionne pas correctement. Voici mon code re...re...remastorisé :
main.c :
Fonction.h :
Fonction.c :
Voila les problèmes dans le programme :
1) Il y a à chaque fois un caractère ou un chiffre différent qui vient s'ajouter à la fin de currentWord.
2) Lorsque la lettre entrée est incorrecte pas de problème le programme agit comme je lui demande mais lorsque celle-ci se trouve bien dans le motSecret (par exemple si je tape la lettre a qui se trouve bien dans le mot marron, le programme agit comme si cela n'était pas le cas et cela pour toutes les autres lettres qui se trouve bien dans le mot SAUF pour la lettre M qu'il ajoute correctement à currentWord lorsque je la propose.
Comment est-ce que je pourrais vous montrer mon programme console pour que vous puissiez voir les problèmes du programme de vous même parce que là j'ai aucune idée pour les résoudre.
caractere va remplacer maLettre après utilisation de la fonction. maLettre est de type char cela serait mieux de mettre caractere de type char et comme la fonction lireCaractere retourne caratere elle doit être elle aussi de type char je pense. Sinon on met également maLettre de type int mais vu qu'il va venir se placer dans currentWord qui est de type char... Mais bon, j'ai quand meme mis caractere et la fonction de type int parce que vous m'avez dit que c'est à cause du getchar() or je ne connais pas trop cette fonction c'était la première fois que je l'utilisait.
Sinon on y est presque... Le programme se lance correctement mais il ne fonctionne pas correctement. Voici mon code re...re...remastorisé :
main.c :
#include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> #include "Fonction.h" int main() { printf("Bienvenue dans le pendu.\n\n"); int nombreDeChancesRestantes = 10; char motSecret[] = "Marron"; int tailleMotSecret = 0; tailleMotSecret = strlen(motSecret); char* currentWord = NULL; currentWord = malloc((tailleMotSecret + 1) * sizeof(char)); if(currentWord == NULL) { EXIT_FAILURE; } dissimulerMot(currentWord, tailleMotSecret); char maLettre; do { printf("Il vous reste %d coups a jouer. \n", nombreDeChancesRestantes); printf("Quel est le mot secret ? %s \n", currentWord); printf("Proposez une lettre: "); maLettre = lireCaractere(); if(strchr(motSecret, maLettre) == NULL) { nombreDeChancesRestantes--; } else { ajouterMaLettre(motSecret, tailleMotSecret, maLettre, currentWord); } printf("\n\n"); } while(strcmp(motSecret, currentWord) != 0 && nombreDeChancesRestantes != 0); if(nombreDeChancesRestantes == 0) { printf("Vous avez perdu !!!\n"); } else { printf("Bravo, vous avez gagne !!!\n"); } printf("Le mot secret etait donc: %s \n\n", motSecret); free(currentWord); return 0; }
Fonction.h :
void dissimulerMot(char* motADissimuler, int taille); char lireCaractere(); void ajouterMaLettre(char* motSecret, int taille, char lettreAAjouter, char* currentWord);
Fonction.c :
#include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> void dissimulerMot(char* motADissimuler, int taille) { int i; for(i = 0; i < taille; i++) { motADissimuler[i] = '*'; } } int lireCaractere() { int caractere = 0; caractere = getchar(); caractere = toupper(caractere); while (getchar() != '\n') ; return caractere; } void ajouterMaLettre(char* motSecret, int taille, char lettreAAjouter, char* currentWord) { int i; for(i = 0; i < taille; i++) { if(motSecret[i] != lettreAAjouter) { currentWord[i] = '*'; } else { currentWord[i] = lettreAAjouter; } } }
Voila les problèmes dans le programme :
1) Il y a à chaque fois un caractère ou un chiffre différent qui vient s'ajouter à la fin de currentWord.
2) Lorsque la lettre entrée est incorrecte pas de problème le programme agit comme je lui demande mais lorsque celle-ci se trouve bien dans le motSecret (par exemple si je tape la lettre a qui se trouve bien dans le mot marron, le programme agit comme si cela n'était pas le cas et cela pour toutes les autres lettres qui se trouve bien dans le mot SAUF pour la lettre M qu'il ajoute correctement à currentWord lorsque je la propose.
Comment est-ce que je pourrais vous montrer mon programme console pour que vous puissiez voir les problèmes du programme de vous même parce que là j'ai aucune idée pour les résoudre.
Le deuxième problème de mon programme venait du fait que lorsque j'ai défini le mot secret j'avais écrit :
Mais j'ai modifié et j'ai écrit:
Je pense que vous avez compris d'où venait le problème.
Maintenant les autres lettres sont traités correctement sauf qu'il y a maintenant un autre problème:
Lorsque je tape par exemple la lettre m current word devient M***** mais ensuite je tappe par exemple r et là currentWord devient **RR**
La lettre précédente redevient un * !!!!
char motSecret[] = "Marron"
Mais j'ai modifié et j'ai écrit:
char motSecret[] = "MARRON"
Je pense que vous avez compris d'où venait le problème.
Maintenant les autres lettres sont traités correctement sauf qu'il y a maintenant un autre problème:
Lorsque je tape par exemple la lettre m current word devient M***** mais ensuite je tappe par exemple r et là currentWord devient **RR**
La lettre précédente redevient un * !!!!
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
15 août 2014 à 16:30
15 août 2014 à 16:30
EXIT_FAILURE;
Ce n'est pas EXIT_FAILURE qu'il faut mettre mais return EXIT_FAILURE;
EXIT_FAILURE représente simplement un nombre.
ajouterMaLettre
C'est une question de logique là.
Tu dis dans ton programme de remettre un astérisque si le caractère est différent de lettreAJouer... Relis mon post précédent (tu as mis un else, et j'ai juste parlé d'un if)...
while(strcmp(motSecret, currentWord) != 0 && nombreDeChancesRestantes != 0);
1) Il y a à chaque fois un caractère ou un chiffre différent qui vient s'ajouter à la fin de currentWord.
Tu n'as pas rajouté le '\0' comme j'avais dit ;-) dans ta fonction dissimulerMot().
Pour le point 2, tu as trouvé tout seul.. Effectivement, tu utilises dans ta fonction de lecture toupper() qui convertit en majuscule et ensuite tu compares avec des lettres minuscules dans Marron. Il faut donc mettre MARRON. Bien joué :-).
Là, je pense que ton programme devrait fonctionner :-).
Bon courage.
Ce n'est pas EXIT_FAILURE qu'il faut mettre mais return EXIT_FAILURE;
EXIT_FAILURE représente simplement un nombre.
ajouterMaLettre
C'est une question de logique là.
Tu dis dans ton programme de remettre un astérisque si le caractère est différent de lettreAJouer... Relis mon post précédent (tu as mis un else, et j'ai juste parlé d'un if)...
while(strcmp(motSecret, currentWord) != 0 && nombreDeChancesRestantes != 0);
1) Il y a à chaque fois un caractère ou un chiffre différent qui vient s'ajouter à la fin de currentWord.
Tu n'as pas rajouté le '\0' comme j'avais dit ;-) dans ta fonction dissimulerMot().
Pour le point 2, tu as trouvé tout seul.. Effectivement, tu utilises dans ta fonction de lecture toupper() qui convertit en majuscule et ensuite tu compares avec des lettres minuscules dans Marron. Il faut donc mettre MARRON. Bien joué :-).
Là, je pense que ton programme devrait fonctionner :-).
Bon courage.
Désolé je ne l'est pas posté mais j'avais compris pourquoi la lettre précédente redevenait un * .
Cependant il reste le problème suivant :
1) Il y a à chaque fois un caractère ou un chiffre différent qui vient s'ajouter à la fin de currentWord.
Vous me dîtes :
Tu n'as pas rajouté le '\0' comme j'avais dit ;-) dans ta fonction dissimulerMot().
Je ne comprend pas. Je ne me rappelle pas que vous m'ayez dis ça. Je ne voit pas où mettre le '/0' .
Cependant il reste le problème suivant :
1) Il y a à chaque fois un caractère ou un chiffre différent qui vient s'ajouter à la fin de currentWord.
Vous me dîtes :
Tu n'as pas rajouté le '\0' comme j'avais dit ;-) dans ta fonction dissimulerMot().
Je ne comprend pas. Je ne me rappelle pas que vous m'ayez dis ça. Je ne voit pas où mettre le '/0' .
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
15 août 2014 à 17:31
15 août 2014 à 17:31
Je l'avais mis dans mon tout premier post : https://forums.commentcamarche.net/forum/affich-30653791-difficultes-pour-faire-marcher-mon-programme#1
Une fois que tu as fait :
for(i = 0; i < taille; i++)
{
motADissimuler[i] = '*';
}
dans ta fonction dissimulerMot(), tu as juste à faire : motADissimuler[taille]='\0';
Justement, c'est pour ça qu'il fallait faire taille+1 dans le malloc(). Sinon, il n'y avait pas la place pour mettre le '\0'.
Une fois que tu as fait :
for(i = 0; i < taille; i++)
{
motADissimuler[i] = '*';
}
dans ta fonction dissimulerMot(), tu as juste à faire : motADissimuler[taille]='\0';
Justement, c'est pour ça qu'il fallait faire taille+1 dans le malloc(). Sinon, il n'y avait pas la place pour mettre le '\0'.
Je me suis amusé à améliorer mon programme mais maintenant le problème est revenu...
Voici mon ce que j'ai ajouté par rapport à mon code précédent en plus du motADissimuler[taille]='\0'; dans la fonction dissimulerMot() :
Voici mon ce que j'ai ajouté par rapport à mon code précédent en plus du motADissimuler[taille]='\0'; dans la fonction dissimulerMot() :
int main() { printf("Bienvenue dans le pendu.\n\n"); int nombreDeMots = 0; int numLigne = 0; int indice = 0; int nombreDeChancesRestantes = 10; char motSecret[TAILLE_MAX] = {0}; char caractereActuel; FILE* fichier = NULL; fichier = fopen("Lybrary.txt", "r"); if(fichier != NULL) { do { caractereActuel = fgetc(fichier); if(caractereActuel == '\n') { nombreDeMots++; } } while(caractereActuel != EOF); rewind(fichier); srand(time(NULL)); indice = rand() % nombreDeMots; rewind(fichier); while(numLigne < indice) { if(fgetc(fichier) == '\n') { numLigne++; } } fgets(motSecret, TAILLE_MAX, fichier); fclose(fichier); } else { printf("Impossible d'ouvrir le fichier Lybrary.txt"); }
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
5 sept. 2014 à 20:18
5 sept. 2014 à 20:18
Je te conseille de faire une fonction pour compter le nombre de mots.
Poste ton programme en entier. Ca sera plus simple :-).
Poste ton programme en entier. Ca sera plus simple :-).
14 août 2014 à 12:42
<main.c>/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include "Fonction.h"
int main()
{
printf("Bienvenue dans le pendu.\n\n");
int nombreDeChancesRestantes = 10;
char motSecret[] = "Marron";
int tailleMotSecret = 0;
tailleMotSecret = compteurMot(motSecret);
char* currentWord = NULL;
currentWord = malloc((tailleMotSecret+1) * sizeof(char));
if(currentWord == NULL)
{
exit(0);
}
dissimulerMot(motSecret, tailleMotSecret, currentWord);
char maLettre;
do
{
printf("Il vous reste %d coups a jouer. \n", nombreDeChancesRestantes);
printf("Quel est le mot secret ? %s \n", currentWord);
printf("Proposez une lettre: ");
maLettre = lireCaractere();
if(strchr(motSecret, maLettre) == NULL)
{
nombreDeChancesRestantes--;
}
else
{
ajouterMaLettre(motSecret, tailleMotSecret, maLettre, currentWord);
}
printf("\n\n");
}
while(strcmp(motSecret, currentWord) != 0 && nombreDeChancesRestantes != 0);
if(nombreDeChancesRestantes == 0)
{
printf("Vous avez perdu !!!\n");
}
else
{
printf("Bravo, vous avez gagne !!!\n");
}
printf("Le mot secret etait donc: %s \n\n", motSecret);
free(currentWord);
return 0;
}
/ <main.c>
<Fonction.h>/
char lireCaractere();
int compteurMot(char motACompter[]);
void dissimulerMot(char motADissimuler[], int tailleMotADissimuler, char motDissimule);
void ajouterMaLettre(char motADissimuler[], int tailleMotDissimuler, char lettreInterdite, char motDissimule);
/ <Fonction.h>
<Fonction.c>/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
char lireCaractere()
{
char caractere = 0;
caractere = getchar();
caractere = toupper(caractere);
while (getchar() != '\n') ;
return caractere;
}
int compteurMot(char motACompter[])
{
int i = 0, tailleMotSecret = 0;
char lettre;
do
{
lettre = motACompter[i];
i++;
}
while(lettre != '\0');
tailleMotSecret = i;
return tailleMotSecret;
}
void dissimulerMot(char motADissimuler[], int tailleMotADissimuler, char motDissimule)
{
int i;
motDissimule = motADissimuler;
for(i = 0; i < tailleMotADissimuler; i++)
{
motDissimule[i] = '*';
}
}
void ajouterMaLettre(char motADissimuler[], int tailleMotDissimuler, char lettreInterdite, char motDissimule)
{
int i;
motDissimule = motADissimuler;
for(i = 0; i < tailleMotDissimuler; i++)
{
if(motDissimule[i] != lettreInterdite)
{
motDissimule[i] = '*';
}
}
}
/ <Fonction.c>
Selon mon compilateur, il y aurait 3 erreurs qui se situent aux lignes suivantes :
motDissimule[i] = '*';
if(motDissimule[i] != lettreInterdite)
motDissimule[i] = '*';
Les 3 erreurs sont les mêmes:
error: subscripted value is neither array nor pointer
Il faut garder en tête que mon but est de réaliser un jeu de pendu. Je dois garder le mot secret dissimuler. Lorsque l'utilisateur entre une lettre qui se trouve dans le mot secret une ou plusieurs fois je dois l'afficher (toutes les lettres si la lettre se trouve plusieurs fois dans le mot secret. J'ai cherché et cherché encore et c'est le seul moyen que j'ai trouvé. Même s'il y en a surement d'autres je ne veut pas que vous me le disiez. Je vous demande, s'il vous plait, de m'aider à faire de mon code un code valable sans erreurs ou instructions interdites.
Merci pour votre aide.
14 août 2014 à 15:22
Il faut le mettre entre deux balises "code c". Exemple :
<"code c">/*ici tu mets ton code*/<"/code"> (sans les guillemets).
exit(0);
Pas terrible dans le main(). Mets plutôt return EXIT_FAILURE;
Tu as oublié de changer : char lireCaractere() pour le mettre en int. getchar() renvoie un int et non un char...
void dissimulerMot(char motADissimuler[], int tailleMotADissimuler, char motDissimule)
Attention, motDissimule n'est pas un char mais une adresse sur une zone. Il faut donc faire : char *motDissimule.
motDissimule = motADissimuler;
Que veux-tu faire avec ça ?
Après, il reste essentiellement des erreurs d'algorithme. Mais, je te conseille déjà de corriger et que tu repostes correctement (avec les bonnes balises) ton code pour qu'on y voie plus clair.
14 août 2014 à 22:56
Que veux-tu faire avec ça ?
motDissimule est en fait currentWord et motADissimuler est motSecret. Je dois remplacer à l'affichage le mot secret qui est "marron" ici par "******". C'est pour cela que j'ai créer une chaine de caractere currentWord. Cependant, motSecret doit rester "marron" et non "******" donc j'utilise currentWord qui est égale à motSecret donc "marron" et je remplace toutes ses lettres par * grâce à la fonction dissimulerMot qui se trouve avant la boucle do-while. Ensuite vient la boucle, l'utilisateur propose une lettre. Si cette lettre se trouve bien dans le motSecret alors je l'ajoute avec la fonction ajouterMaLettre à currentWord tout en laissant les autres lettres dissimulées par des *. Si la lettre proposée ne correspond pas, je n'utilise pas la fonction et je diminue le nombre de chances restantes à l'utilisateur. La boucle doit s'arrêter si current word = motSecret donc lorque l'utilisateur aura trouver toutes les lettres ou lorsque son nombres de chances sera égale à zero. Cependant, mon programme ne veut pas fonctionner. J'ai suivi vos consignes mais la fonction lireCaractere() renvoie la variable caractere qui de type char alors pourquoi la mettre de type int. Je l'ai fait comme même comme vous l'avez dit et j'ai aussi remplacé exit(0) par EXIT_FAILURE. Et j'ai remplacé char motDissimule par char* motDissimule dans la fonction dissimulerMot. Voila mon code :
main.c :
Fonction.h :
Fonction.c