Partage
  • Partager sur Facebook
  • Partager sur Twitter

problème avec les paramètres d'un while

j'ai honte ... -_-

Sujet résolu
    27 juin 2007 à 16:34:53

    Bonjours!
    voilà, j'ai un problème avec un paramètre d'un while: je veux que la boucle continue tant que la variable coupRestant != 0 et que mon tableau lettreTrouvee n'a pas toutes ces valeurs à 1...

    voici mon code:
    }while(coupRestant != 0 && lettreTrouvee[] != {1, 1, 1, 1, 1, 1});


    ça ne compile pas, et je n'ai en fait jamais fait de while prenant pour paramètre le contenue d'un tableau... Comment dois-je m'y prendre?

    Merci d'avance, et désolé pour cette question aussi bête, mais là j'avoue que je bloque un peu :(:euh:
    • Partager sur Facebook
    • Partager sur Twitter
      27 juin 2007 à 16:44:55

      Il te suffit de créer une fonction de test:
      int tableauFull(size_t * tab,size_t n, size_t valeur_test )
      {
         size_t i;
         for(i=0;i<n;i++)
         {
            if(tab[i]!=valeur_test) return 0;
         }
         return 1;
      }


      Et dans ton test:

      }while(coupRestant != 0 && !(tableauFull(...));
      • Partager sur Facebook
      • Partager sur Twitter
        27 juin 2007 à 17:01:48

        merci, mais je ne comprends pas entièrement ta fonction, ou plus précisément son prototype: size_t? qu'est-ce? une fonction? n? je ne vois pas à quoi correspond cette variable...
        • Partager sur Facebook
        • Partager sur Twitter
          27 juin 2007 à 17:05:06

          En fait size_t remplace n'importe quel type que tu peux utiliser, int/char/float ou autre. Cela permet d'avoir une fonction qui s'adapte à n'importe quel type de tableau comme tu n'as pas indiqué si ton tableau était un char/int ou autre.
          n c'est tout simplement le nombre d'éléments de ton tableau.

          Tu peux remplacer size_t par le type que tu veux ;)
          • Partager sur Facebook
          • Partager sur Twitter
            27 juin 2007 à 19:06:54

            à ok merci beaucoup :D
            je ne connaissait pas cette technique :)
            • Partager sur Facebook
            • Partager sur Twitter
              27 juin 2007 à 19:28:26

              Ca va pas, non ?

              size_t est un typedef de long unsigned int, ce n'est pas un type générique...

              Il trouve sa principale utilisation en tant qu'index de tableaux.

              P.S: Ca aurait pu se déduire rien que par son nom... ("saïze taïpe")
              • Partager sur Facebook
              • Partager sur Twitter
                27 juin 2007 à 19:40:30

                De toute façon mon code ne marche pas: quelle que soit la lettre tapée, le programme me dit que que j'ai gagné :( la fonction ne marche pas... quelqu'un pourrait-il m'aider?
                merci d'avance
                • Partager sur Facebook
                • Partager sur Twitter
                  27 juin 2007 à 19:53:18

                  Citation : kidpaddle2

                  long unsigned int


                  Ce ne serait pas plutôt:
                  unsigned long int
                  ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    27 juin 2007 à 20:09:05

                    c'est bon, j'ai résolu mon problème :)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      27 juin 2007 à 20:20:56

                      Peu importe, les deux sont équivalents. J'ai donné la définition telle qu'elle était présente dans <stddef.h>.

                      Sinon Squ@bad', on est pas devins : ton code, il vient à pied ?

                      Edit: Bon, ok :-°
                      • Partager sur Facebook
                      • Partager sur Twitter
                        27 juin 2007 à 22:33:22

                        si tu veux mon code, c'est le code du TP du pendu... je vais le donner en entier, comme ça si y en a qui veulent, y peuvent me donner leurs conseils et leurs critiques :)
                        Bon, y a pas encore le gestionnaire du dictionnaire, je vais bientôt le rajouter, avec aussi choix du niveau de difficultée et mode deux joueurs, là c'est le jeu "basique":

                        /*Jeu du pendu
                        par Squ@bad'
                        projet commencé le: 26-07-2007
                        dernière modification: le 27-06-2007

                        Reste à faire:
                               
                                -dico
                                -niveau de difficulté (nbr de coupRestant)
                                -partie 2 joueurs*/


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

                        //prototypes:

                        char lireCaractere();
                        int gagne(int lettreTrouvee[]);

                        int main(int argc, char *argv[])
                        {

                        //déclaration des variables du jeu:
                        long coupRestant = 10;
                        char lettre = 0;
                        char* maLettre = NULL;
                        char motSecret[] = "MARRON";
                        int lettreTrouvee[6] = {0}; // Un tableau de booléens. Chaque case correspond à une lettre du mot secret. 0 = lettre non trouvée, 1 = lettre trouvée
                        int i = 0;

                            printf("****************\n");
                            printf("*   Le pendu   *\n");
                            printf("****************\n\n\n");
                            printf("Bonjours et bienvenue dans le jeu du pendu!\n\n\n");

                            //boucle du jeu
                            do
                            {
                                 
                                  printf("\nIl vous reste %ld coups a jouer.\n", coupRestant);
                                  printf("Quel est le mot secret? ");
                                  //On affiche autant d'étoiles qu'il reste de lettres à trouver restantes
                                  for(i=0; i<6; i++)
                                  {
                                  if(lettreTrouvee[i] == 0)
                                  {
                                  printf("*");
                                  }
                                  else
                                  {
                                  printf("%c", motSecret[i]);
                                  }
                                  }
                                  printf("\nProposez une lettre: ");
                                  lettre = lireCaractere();
                                  //on recherche si la lettre tapée par le joueur est dans le mot secret
                                  maLettre = strchr(motSecret, lettre);
                                 
                                  //si la lettre tapée n'est pas dans le mot secret
                                  if(maLettre == NULL)
                                  {
                                              //on enlève un coup à jouer
                                              coupRestant--;
                                  }
                                  //si la lettre tapée est dans le mot secret
                                  else
                                  {
                                      //on met à la case correspondant à la lettre la valeur 1 dans le tableau booléen lettreTrouvee
                                      //pour qu'elle s'affiche à la place de l'étoile:
                                     
                                      /*tu considère ton pointeur 'maLettre' comme ce qu'il est, c'est-à-dire le pointeur vers la première lettre du mot
                                      semblable à 'lettre', il faut donc soustraire le pointeur 'lettre' à celui 'maLettre' et diviser par
                                      'sizeof(typeDuTableau)' pour trouver l'index de '*maLettre' dans le tableau 'lettre'. */

                                      lettreTrouvee[((long)maLettre) - ((long)motSecret)] = 1;
                                     
                                      //Toutes les lettres identiques doivent-être trouvées en même temps, au cas où on vérifie
                                      for(i=0; i<6; i++)
                                      {
                                     
                                      if(motSecret[i] == lettre)
                                      {
                                            lettreTrouvee[i] = 1;         
                                      }
                                     
                                      }
                                  }
                                 

                            //le jeu continue tant (~qu'on a pas trouvé toutes les lettres ou~) qu'on a encore des coups restants
                            }while(coupRestant != 0 && !gagne(lettreTrouvee));
                         
                          if(coupRestant == 0)
                          {
                                         printf("\n\n\n***Domage vous avez perdu***\nLe mot secret etait: %s", motSecret);
                          }
                         
                          else
                          {
                              printf("\n\n\n***Bravo, vous avez gagne !!!***\nLe mot secret etait bien: %s", motSecret);
                          }
                         
                          getch();     
                          return 0;
                        }


                        char lireCaractere()
                        {
                            char caractere = 0;

                            caractere = getchar(); // On lit le premier caractère
                            caractere = toupper(caractere); // On met la lettre en majuscule si elle ne l'est pas déjà

                            // On lit les autres caractères mémorisés un à un jusqu'à l'\n (pour les effacer)
                            while (getchar() != '\n') ;

                            return caractere; // On retourne le premier caractère qu'on a lu
                        }


                        int gagne(int lettreTrouvee[])
                        {
                            long i = 0;
                            int joueurGagne = 1;

                            for (i = 0 ; i < 6 ; i++)
                            {
                                if (lettreTrouvee[i] == 0)
                                    joueurGagne = 0;
                            }

                            return joueurGagne;
                        }

                        // Merci à tout ceux qui m'ont aidé sur certains points sur le forum :D sans eux je n'y serait pas encore, et ça m'a permis d'apprendre plusieurs choses et d'en revoir d'autres ;)


                        Voilà, qu'en pensez-vous? :-°
                        • Partager sur Facebook
                        • Partager sur Twitter
                          27 juin 2007 à 22:59:18

                          Citation : nepser

                          En fait size_t remplace n'importe quel type que tu peux utiliser, int/char/float ou autre. Cela permet d'avoir une fonction qui s'adapte à n'importe quel type de tableau comme tu n'as pas indiqué si ton tableau était un char/int ou autre.
                          n c'est tout simplement le nombre d'éléments de ton tableau.

                          Tu peux remplacer size_t par le type que tu veux ;)


                          Ceci est totalement faux.
                          Je ne sais pas d'où tu tiens ça, mais il faut cesser de raconter n'importe quoi, surtout à des débutants crédules et naïfs...

                          http://mapage.noos.fr/emdel/notes.htm#size_t
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Music only !
                            28 juin 2007 à 0:14:05

                            Mince, mon plan pour instruire d'inepties tous les débutants du site du zéro est réduis à néant dès le début :colere2:
                            Je pensais que ça passerai innaperçut pourtant :(
                            • Partager sur Facebook
                            • Partager sur Twitter

                            problème avec les paramètres d'un while

                            × 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