Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ma fonction 'lire_caractere' ne fonctionne pas !

Sujet résolu
    22 janvier 2021 à 22:24:34

    Bonjour,

    je suis le cours d'Open Classrooms (pendu). J'ai l'impression que ma fonction "lire_caractere" ne fonctionne pas. Je ne sais pas si le problème vient de là...

    #include <stdio.h>
    #include <stdlib.h>
    #include <ctype.h>
    
    int gagne(int lettre_trouvees[]);
    int recherche_lettre(char lettre, char mot_secret[], int lettre_trouvees[]);
    char lire_caractere();
    int main()
    {
    	char mot_secret[] = "SALUT";
    	int lettre = 0, compteur = 10;
    	int lettre_trouvees[6] = {0};
    	int i = 0;
    
    	printf("\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t---- Bienvenue dans le jeu du pendu ----\n\n");
    	printf("\n\n\t\t\tVous avez 10 essai pour trouver le mot mystere !\n");
    	printf("\n\tLe mot : *****\n\n");
    
    	while(compteur > 0 && !gagne(lettre_trouvees))
    	{
    		printf("\tIl vous reste %d coup à jouer !\n", compteur);
    		printf("Entrez une lettre pour trouver le mot mystere ! : ");
    		scanf("%c", lettre);
    		lettre = lire_caractere();
    		
    		if (!recherche_lettre(lettre, mot_secret, lettre_trouvees))
    		{
    			compteur--;
    		}
    		
    		for (i = 0; i < 6; i++)
    		{
    			if (lettre_trouvees[i])
    			{
    				printf("%c", lettre_trouvees);
    			}
    			else
    			{
    				printf("*");
    			}
    		}
    
    		if (gagne(lettre_trouvees))
    		{
    			printf("Bravo ! Vous avez gagné! Le mot-secret était bien %s", mot_secret);
    		}
    		else
    		{
    			printf("Perdu ! Le mot secret était %s", mot_secret);
    		}
    	}
    	return 0;	
    }
    
    
    char lire_caractere()
    {
    	char caractere = 0;
    
    	caractere = getchar();
    	caractere = toupper(caractere);
    
    	while(getchar() != '\n') ;
    
    	return caractere;
    }
    
    int gagne(int lettre_trouvees[])
    {
    	int i = 0;
    	int joueur_gagne = 1;
    	
    	for (i = 0; i < 6; ++i)
    	{
    		if(lettre_trouvees == 0)
    		{
    			joueur_gagne = 0;
    		}	
    	}
    
    	return joueur_gagne;
    }
    
    int recherche_lettre(char lettre, char mot_secret[], int lettre_trouvees[])
    {
    	int i = 0;
    	int bonne_lettre = 0;
    
    	for (i = 0 ; mot_secret[i] != '\0' ; i++)
    	{
    		if (lettre == mot_secret[i])
    		{
    			bonne_lettre = 1;
    			lettre_trouvees[i] = 1;
    		}
    	}
    	return bonne_lettre;
    }
    

    J'ai beau chercher, je trouve ma fonction parfaitement identique à celle du cours !

    Merci d'avance,

    Cdlt

    • Partager sur Facebook
    • Partager sur Twitter
      22 janvier 2021 à 22:51:33

      Salut, pourquoi tu as mis un scanf en plus de getchar ? J'ai testé et apparemment ta fonction renvoie bien le caractère entré en majuscule

      Edit : Essaie ce code :

      #include <stdio.h>
      #include <stdlib.h>
      #include <conio.h>
      #include <ctype.h>
      
      #define NB_LETTRES_MOT 5
      
      int gagne(int lettre_trouvees[]);
      int recherche_lettre(char lettre, char mot_secret[], int lettre_trouvees[]);
      char lire_caractere();
      
      int main()
      {
          char mot_secret[NB_LETTRES_MOT+1] = "SALUT";
          int lettre = 0, compteur = 10;
          int lettre_trouvees[6] = {0};
          int i = 0;
      
          printf("\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t---- Bienvenue dans le jeu du pendu ----\n\n");
          printf("\n\n\t\t\tVous avez 10 essai pour trouver le mot mystere !\n");
          printf("\n\tLe mot : *****\n\n");
      
          while(compteur > 0 && !gagne(lettre_trouvees))
          {
              printf("\tIl vous reste %d coup à jouer !\n", compteur);
              printf("Entrez une lettre pour trouver le mot mystere ! : ");
              //scanf("%c", lettre);
              lettre = lire_caractere();
      
              if (!recherche_lettre(lettre, mot_secret, lettre_trouvees))
              {
                  compteur--;
              }
      
              for (i = 0; i < NB_LETTRES_MOT; i++)
              {
                  if (lettre_trouvees[i])
                  {
                      //printf("%c", lettre_trouvees);
                      printf("%d", lettre_trouvees[i]);
                  }
                  else
                  {
                      printf("*");
                  }
              }
      
              if (gagne(lettre_trouvees))
              {
                  printf("Bravo ! Vous avez gagné! Le mot-secret était bien %s", mot_secret);
              }
              else
              {
                  printf("Perdu ! Le mot secret était %s", mot_secret);
              }
          }
          return 0;
      }
      
      
      char lire_caractere()
      {
          char caractere = 0;
      
          caractere = getchar();
          caractere = toupper(caractere);
      
          while(getchar() != '\n') ;
      
          return caractere;
      }
      
      int gagne(int lettre_trouvees[])
      {
          int i = 0;
          int joueur_gagne = 1;
      
          for (i = 0; i < NB_LETTRES_MOT; ++i)
          {
              //if(lettre_trouvees == 0)
              if(lettre_trouvees[i] == 0)
              {
                  joueur_gagne = 0;
              }
          }
      
          return joueur_gagne;
      }
      
      int recherche_lettre(char lettre, char mot_secret[], int lettre_trouvees[])
      {
          int i = 0;
          int bonne_lettre = 0;
      
          for (i = 0 ; mot_secret[i] != '\0' ; i++)
          {
              if (lettre == mot_secret[i])
              {
                  bonne_lettre = 1;
                  lettre_trouvees[i] = 1;
              }
          }
          return bonne_lettre;
      }
      



      -
      Edité par KevinGL 22 janvier 2021 à 23:13:14

      • Partager sur Facebook
      • Partager sur Twitter
        23 janvier 2021 à 7:18:36

        Oh ! Super, ça marche, pourrais-tu me dire pourquoi tu as mis "%d"dans le "printf" ?

        Lorsque que je met "%c" le mot secret n'apparait pas.

        • Partager sur Facebook
        • Partager sur Twitter
          23 janvier 2021 à 10:52:08

          Regarde bien les corrections que j'ai faites, comme ça tu comprendras tes erreurs. Si tu veux afficher le mot secret ce n'est pas lettre_trouves que tu dois envoyer à printf
          • Partager sur Facebook
          • Partager sur Twitter

          Ma fonction 'lire_caractere' ne fonctionne pas !

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown