problème dans un jeu de Pendu

problème dans un jeu de Pendu - C - Programmation

Marsh Posté le 06-06-2005 à 13:58:44    

Mon problème viens du fait qu'il y a juste la 1ere lettre qui ne fonctionne jamais et je ne vois vraiment pas d'où ca vient.
 
Par exemple, on cherhe le mot "nico", le 'i', 'o' et 'c' sont affiché mais jamais ne 'n', il va dans la boucle de non présence d'une lettre.j'ai donc mis des affichages un peut partout, je vous laisse tester le code.
 
Pouvez vous m'aider svp?
merci
 
Voici le code (désolé si l'alignement n'est pas top car c'est mon éditeur):

Code :
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #define longueurmax 100
  4. void entreeMot(char * mot){
  5. //Acquisition du mot de départ
  6. printf("\nEntrez le mot a deviner: " );
  7. scanf("%s", mot);
  8. printf("\n" );
  9. }
  10. int longueur(char * mot){
  11. //Longueur du mot de départ
  12.     int longueurChaine=0;
  13. while(*mot){
  14.  longueurChaine++;
  15.  mot++;
  16. }
  17. printf("la longueur: %d\n",longueurChaine);
  18. return longueurChaine;
  19. }
  20. void initTab(char * mot,char motencours[longueurmax],char motadeviner[longueurmax]){
  21.  int i=0;
  22.         int longueurmot=longueur(mot);
  23.         for(i=0;i<longueurmot;i++){
  24.                                    motencours[i]='-';
  25.         }
  26.         for(i=longueurmot;i<longueurmax;i++){
  27.                                    motencours[i]=NULL;
  28.         }
  29.         for(i=0;i<longueurmot;i++){
  30.                                    motadeviner[i]=*mot;
  31.                                    mot++;
  32.         }
  33.         for(i=longueurmot;i<longueurmax;i++){
  34.                                    motadeviner[i]=NULL;
  35.         }
  36.         printf("Dans fonction initTab: %s\n",motadeviner);
  37.         printf("Dans fonction initTab: %s\n",motencours);
  38. }
  39.    
  40. int motContientLettre(char motadeviner[longueurmax],char lettre, char * mot){
  41.     int rep=0,i,longueurmot=longueur(mot);
  42.    
  43.     for(i=0;i<longueurmot;i++){
  44.                                if(motadeviner[i]==lettre)
  45.                                                          rep=1;
  46.     }
  47.     return rep;
  48. }
  49. placerlettre(char motadeviner[longueurmax],char motencours[longueurmax],char lettre,char * mot){
  50.    
  51.     int i,longueurmot=longueur(mot);
  52.    
  53.     for(i=0;i<longueurmot;i++){
  54.                                if(motadeviner[i]==lettre)
  55.                                                           motencours[i]=lettre;         
  56.     }     
  57. }
  58. main(){
  59. char *mo;
  60.     mo=malloc(30);
  61. char motencours[longueurmax];
  62. char motadeviner[longueurmax];
  63. char lettre;
  64. int nbCoups=5;
  65. printf("********************\n" );
  66. printf("****Jeu du pendu****\n" );
  67. printf("********************" );
  68. entreeMot(mo);
  69.     initTab(mo,motencours,motadeviner);
  70.    
  71.     printf("dans le main: %s\n",motadeviner);
  72.     printf("dans le main: %s\n",motencours);
  73.  
  74.      while(nbCoups!=0 && motadeviner!=motencours){
  75.                     printf("%s",motencours);
  76.                     printf("\nil vous reste %d chances\n",nbCoups);
  77.                     printf("entrer une lettre: " );
  78.                     scanf("%s",&lettre);
  79.  
  80.                     if(motContientLettre(motadeviner,lettre,mo)==1){
  81.                                                                     printf("dans le if: %s\n",motadeviner);
  82.                                                                     printf("dans le if: %s\n",motencours);
  83.                                                                     placerlettre(motadeviner,motencours,lettre,mo);                                           
  84.                     }
  85.                     else{
  86.                         printf("dans le else: %s\n",motadeviner);
  87.                         printf("dans le else: %s\n",motencours);
  88.                         printf("\nLettre non présente\n\n" );
  89.                         nbCoups--;
  90.                     }
  91.     }   
  92. }

Reply

Marsh Posté le 06-06-2005 à 13:58:44   

Reply

Marsh Posté le 06-06-2005 à 14:00:59    

voici un lien pour télécharger le code pour éviter le copier/coller:
 
Le code

Reply

Marsh Posté le 06-06-2005 à 19:52:53    

up

Reply

Marsh Posté le 06-06-2005 à 20:06:10    

ce ne serais pas "betement" un -1 à faire par rapport à la longueur du mot ?


---------------
.
Reply

Marsh Posté le 06-06-2005 à 21:26:04    

tequilla76 a écrit :

voici un lien pour télécharger le code pour éviter le copier/coller:
 
Le code


Je ne pas voir ça:


main.c: In function `initTab':
 
main.c:46: warning: assignment makes integer from pointer without a cast
main.c:53: warning: assignment makes integer from pointer without a cast
 
main.c: At top level:
main.c:69: warning: return type defaults to `int'
 
main.c: In function `placerlettre':
main.c:77: warning: control reaches end of non-void function
main.c: At top level:
main.c:79: warning: return type defaults to `int'
main.c: In function `main_':
main.c:115: warning: control reaches end of non-void function
 


C'est un peu trop compliqué. J'ai utilisé les fonctions standard de traitement de chaines... J'ai aussi utilisé des fonctions de saisies correctes.
 
http://mapage.noos.fr/emdel/notes.htm#saisie
http://mapage.noos.fr/emdel/notes.htm#fichiers
 
Les fonctions sont ici
 
http://mapage.noos.fr/emdel/clib.htm
Module IO
 


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
 
#include"ed/inc/io.h"
 
void entreeMot (char *mot, size_t size)
{
   //Acquisition du mot de départ
   printf ("\nEntrez le mot a deviner: " );
   get_s (mot, size);
   printf ("\n" );
}
 
void initTab (char *mot, char motencours[], char motadeviner[], size_t longueurmax)
{
   size_t longueurmot = strlen (mot);
 
   memset (motencours, '-', longueurmot);
   memset (motencours + longueurmot, 0, longueurmax - longueurmot);
   strncpy (motadeviner, mot, longueurmax);
 
   printf ("Dans fonction initTab: %s\n", motadeviner);
   printf ("Dans fonction initTab: %s\n", motencours);
}
 
int motContientLettre (char motadeviner[], int lettre)
{
   return strchr (motadeviner, lettre) != NULL;
}
 
void placerlettre (char const motadeviner[], char motencours[], char lettre)
{
   char *p = strchr (motadeviner, lettre);
 
   if (p != NULL)
   {
      motencours[(size_t) (p - motadeviner)] = lettre;
   }
}
 
int main (void)
{
#define longueurmax 100
 
   char mo[30];
 
   char motencours[longueurmax];
   char motadeviner[longueurmax];
   int lettre;
   int nbCoups = 5;
   int trouve = 0;
 
   printf ("********************\n" );
   printf ("****Jeu du pendu****\n" );
   printf ("********************" );
 
   entreeMot (mo, sizeof mo);
   initTab (mo, motencours, motadeviner, longueurmax);
 
   printf ("dans le main: %s\n", motadeviner);
   printf ("dans le main: %s\n", motencours);
 
   while (nbCoups != 0 && !trouve)
   {
      printf ("'%s'\n", motencours);
      printf ("il vous reste %d chances\n", nbCoups);
      printf ("entrer une lettre: " );
      fflush (stdout);
      lettre = get_c ();
 
      if (motContientLettre (motadeviner, lettre) == 1)
      {
         placerlettre (motadeviner, motencours, lettre);
      }
      else
      {
         printf ("\nLettre non présente\n" );
         nbCoups--;
      }
      trouve = strcmp (motadeviner, motencours) == 0;
   }
 
   if (trouve)
   {
      printf ("GAGNE! : '%s'\n", motencours);
   }
   return 0;
}


Message édité par Emmanuel Delahaye le 06-06-2005 à 22:05:23

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 07-06-2005 à 08:04:21    

merci mais je n'arrive pas a l'éxécuter car il ne trouve pas le  #include"ed/inc/io.h".

Reply

Marsh Posté le 07-06-2005 à 08:07:28    

tequilla76 a écrit :

merci mais je n'arrive pas a l'éxécuter car il ne trouve pas le  #include"ed/inc/io.h".


Ca, c'est sûr. Quels sont les mots que tu ne comprends pas dans ce texte :

Citation :


Les fonctions sont ici
 
http://mapage.noos.fr/emdel/clib.htm
Module IO  


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 07-06-2005 à 09:04:52    

ok je vais tester ca ce soir quand je serais chez moi car maintenant je suis en cours :D

Reply

Marsh Posté le 07-06-2005 à 17:43:17    

je le mets où le fichier io.h?
 
Je ne peux pas prendre le io.h d'origine ?

Reply

Marsh Posté le 07-06-2005 à 18:30:12    

tequilla76 a écrit :

je le mets où le fichier io.h?
 
Je ne peux pas prendre le io.h d'origine ?


Quel io.h d'origine ? Il n'y a rien de tel dans les headers standards du langage C.
 
Sur mon site, j'explique comment installer la bibliothèque... C'est pas exactement pour les débutants, mais le but est plutôt de regarder dans les fichiers et de s'inspirer de ce qu'il y a dedans pour écrire son code... Sinon, j'ai posté 3000 fois des codes simplifiés de get_s() et get_c() sur le forum.. Fouiller les archives...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed