Le jeu du pendu debutant

fannypamcof Messages postés 4 Statut Membre -  
fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je suis débutante en c et je n'arrive pas à trouver le problème dans mon programme. Pourriez vous jeter un oeil si ça ne vous dérange pas. Le problème est que je n'arrive pas à remplacer dans le mot étoile la lettre choisie par le joueur lorsqu'elle est correcte, le soucis vient du if...

Merci d'avance


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int p;
int i;
char mot1[100]={0};
char mot2[100]={0};
char lettre[26]={0};
int erreur=0;

printf("Le joueur 1 entre le mot :");
scanf("%s",&mot1);

printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");

p=strlen(mot1);

for (i=0;i<p;i++) {
mot2[i]=42;
}
printf("Le mot a trouve est de la forme %s",mot2);

while (mot1!=mot2 && erreur<10)
{
printf("\n Entrer une lettre");
scanf("\n %c",&lettre);
if (lettre[i]=mot1[i]){
mot2[i]=lettre[i];
printf("Le mot devient %s",mot2);
}
else{
erreur=erreur+1;
printf("Il vous reste %d coups",(10-erreur));
}

printf("\n le mot est %s",mot2);
}
return 0;
}

4 réponses

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Bonjour,

    Plein de choses à revoir. Je reprends le code :
    scanf("%s",&mot1);
    Pas de & pour un tableau.

    mot2[i]=42;
    Mets plutôt '*' que 42, c'est plus lisible...

    while(mot1!=mot2 ...)
    Ca sera toujours faux. Toi ce que tu veux faire, c'est plutôt :
    while(strcmp(mot1, mot2) ...) /*retourne 0 si les deux tableaux sont égaux*/

    scanf("\n %c",&lettre);
    Mets plutôt : scanf("%c",&lettre) ou simplement : lettre=getchar();
    Et remets un getchar(); juste après pour supprimer le \n du buffer clavier.
    Ce qui donne :
    scanf("%c",&lettre); /*ou lettre=getchar();*/
    getchar();

    if (lettre[i]=mot1[i]){
    Il faut mettre == ici. == c'est pour la comparaison, = pour l'affectation.
    De plus, attention lettre est un tableau. Il aurait fallu qu'il soit déclaré : char lettre;
    Donc là, à toi de préciser ce que tu veux, car c'est pas clair.

    printf("\n le mot est %s",mot2);
    N'oublie pas de mettre un \n après le %s avant d'appeler le return 0; final. Ou sinon mets un fflush(stdout);

    Corrige tout le code, et reposte-le s'il reste des erreurs. N'oublie pas d'utiliser les balises "code" (à droite du bouton souligné), sinon c'est illisible pour nous...
    1
  2. ken dumoulin Messages postés 60 Statut Membre 4
     
    Je fais pas de c mais tu peux essayer de mettre deux = au lieu de un seul dans ton if.
    if(lettre[i]==mot1[i])
    0
  3. fannypamcof Messages postés 4 Statut Membre
     
    Merci pour ta réponse mais quand je met le == ça ne remplace toujours pas par la lettre entrer si elle existe dans mot1 et en plus si elle n'appartient pas au mot 1 il ne rentre pas dans le else, il reste dans le if (il ne met plus qu'il reste x coup a jouer).
    0
  4. fannypamcof Messages postés 4 Statut Membre
     
    Re bonsoir,

    il manque juste un arrêt à la fin du programme afin que l'on sache le bon mot si l'on a perdu, par exemple et si l'on a gagne avant que le programme s'arrete. Je ne sais pas du tout comment faire ça mais le programme est bon.

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int main()
    {
    int p;
    int i;
    char mot1[100]={0};
    char mot2[100]={0};
    char lettre;
    int erreur=0;
    
    printf("Le joueur 1 entre le mot :");
    scanf("%s",&mot1);
    
    printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
    
    
    p=strlen(mot1);
    
    for (i=0;i<p;i++) {
    mot2[i]=42;
    }
    printf("Le mot a trouve est de la forme %s",mot2);
    
    
    while ((strcmp(mot1,mot2)!= 0) || (erreur<10)){
    printf("\n Entrer une lettre ");
    scanf("\n %c",&lettre);
    int cpt = 0;
    for(i=0;i<p;i++){
    if (lettre == mot1[i]){
    mot2[i]=lettre;
    cpt=cpt+1;
    }
    }
    if (cpt == 0){
    erreur=erreur+1;
    printf("\nIl vous reste %d coups",(10-erreur));
    }
    printf("\nle mot devient %s",mot2);
    }
    printf("\nle mot est %s",mot2);
    return 0;
    }
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Il y a encore des problèmes dont j'ai signalés plsu haut.
      Sache, que ce n'est pas parce qu'un programme fonctionne qu'il est correct. Surtout en C.
      0