Besoin Aide sur mon programme

knockner Messages postés 5 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 17 novembre 2008 - 16 nov. 2008 à 21:40
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 17 nov. 2008 à 21:44
Voici mon programme je n'arrive pas a trouver mon erreurs , le programme se lance il faut appuyer 2 fois sur entrée , et des que l'on rentre une lettre le tableau n'affiche plus les etoiles , il affiche la lettre , seule la decrementation marche correctement.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    char motSecret[]="ABSORBTION";
    char tableauLettre[11]="**********";
    char nombresChances = 10;
    char motRentre =0;
    long i= 0;
   
    printf("****** Jeux du Pendu ******\n\n"); // INTRO
   
    while (nombresChances != 0)
    {
          printf("Le mot secret est?:%s\n", tableauLettre);
          printf("Rentrer 1 lettre \n");
         
          fgets(tableauLettre, 11, stdin);  //UTILISATEUR RENTRE UNE LETTRE
          scanf("%c", &motRentre);
         
          for (i=0; i<11; i++)    //PARCOUR LE TABLEAU
          {
              if (motSecret[i]== motRentre)    //COMPARE LE motRentre si il est dans le motSecret
              {
                                 tableauLettre[i]= motRentre;
                                 printf("%s\n", tableauLettre[i]);     //AFFICHE le tableau et la lettre à trouver
                                 printf("Plus que %ld chances de gagner\n", nombresChances);
              }
          }
          if (motSecret[i] != motRentre)
          {
                        nombresChances--;
                        printf("Plus que %ld chances de gagner\n", nombresChances);
          }
         
    }
                         
         
   
   
 
  system("PAUSE");   
  return 0;
}

6 réponses

BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
17 nov. 2008 à 11:45
Hello,
Alors, pourquoi le mot secret ne s'affiche plus? Tout simplement parce que tu l'effaces à la ligne:
fgets(tableauLettre, 11, stdin);  //UTILISATEUR RENTRE UNE LETTRE

Ensuite, pourquoi il faut appuyer 2 fois sur ENTREE? Tout simplement parce que tu demandes 2 fois une intervention utilisateur avec les lignes suivantes:
fgets(tableauLettre, 11, stdin);  <-- tu demandes une 1ère fois une chaine saisie par l'utilisateur
scanf("%c", &motRentre); <-- tu demandes un caractère

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
knockner Messages postés 5 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 17 novembre 2008
17 nov. 2008 à 18:26
Merci pour ta reponse mais encore quelques questions

Si je suprimer mon scanf , mon pendu m'affiche ceci:
Le mot secret est ?: **********
Rentrer une lettre
A
<null>
Plus que 10 chance de gagner
Le mot secret est ?: A

Si je suprime mon fgets le programme plante.

je ne voit pas d'ou sort le <null>

Pouvais m'aider et me dire comment faire que si la lettre corespond on affiche la lettre puis les autres en * et que la ne fasse pas comme dans mon programme que des que l'on rentre une lettre le tableau affiche la lettre.
0
knockner Messages postés 5 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 17 novembre 2008
17 nov. 2008 à 18:26
C'est un  jeu du pendu , j'ai oublier de preciser.
Cordialment.
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
17 nov. 2008 à 19:50
Hello,
Voici comment j'ai modifié ton code pour le faire fonctionner (cf.remarques en dessous):

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
    char motSecret[]= "absorption";    <-- minuscules (1)
    char tableauLettre[11] ="**********";
    char nombresChancesTotal = 10;
    char nombresChances = nombresChancesTotal;
    char motRentre =0;
    long i= 0;
  
    printf("****** Jeux du Pendu ******\n\n"); // INTRO
  
    while (nombresChances != 0)
    {
          printf("Le mot secret est?:%s\n", tableauLettre);
          printf("Rentrer 1 lettre \n");
        
          scanf("%c", &motRentre);    <-- Saisie du caractère
        
          for (i =0; i<11; i++)    //PARCOUR LE TABLEAU
          {
              if (motSecret[i]= = motRentre)    //COMPARE LE motRentre si il est dans le motSecret
              {
                 tableauLettre[i]= motRentre;   <-- Suppression des printf "pollueurs"
              }
          }
          if (strcmp(motSecret,tableauLettre))   <-- Comparaison de chaines  (2)
          {
            nombresChances--;
            printf("Plus que %ld chances de gagner\n", nombresChances);
            fflush(stdin);    <-- Pour nettoyer le buffer de saisie
          }
          else
          {
              printf("Bravo, vous avez trouve en %d coups\n",nombresChancesTotal-nombresChances);
              break;
          }   
    }
 
  system("PAUSE");  
  return 0;
}

Remarques:
(1): minuscules pour simplifier la comparaison des caractères (sinon, faut tester majuscule ET minuscule)
(2): en C, la comparaison de chaines de caractères ne se fait pas avec " =="

N'hésites pas si tu as des questions sur le code

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
knockner Messages postés 5 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 17 novembre 2008
17 nov. 2008 à 21:26
Merci beaucoup Buno effectivement maintenant le programme fonctionne.

Maintenant j'aimerais mettre si possible un mot au hazard , faire une randomisation , que le mot ne soit pas toujours absorbtion.

je sais qu'il faut mettre:
#include <time.h>

srand(time(NULL));    
motSecret  = rand()

Mais apres je ne voit pas trop comment faire pour que le nom soit un nom valide pas exemple que cela ne donne pas par exemple : "azeididid" mais un mot qui a un sens comme "chemise" par exemple.
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
17 nov. 2008 à 21:44
Oulah...c'est un peu compliqué ça: générer aléatoirement un mot valide...
Ce que tu peux faire pour biaiser le truc est la chose suivante:
- un fichier avec une liste de mots
- une génération aléatoire d'index qui te permettra d'aller chercher le i-ème mot de cette liste

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
Rejoignez-nous