Partage
  • Partager sur Facebook
  • Partager sur Twitter

amélioration du pendu

soucis pour le dico

    17 août 2006 à 11:07:42

    bonjour à vous tous :p
    j'ai un petit soucis suite à l'amélioration du jeu du pendu
    j'ai crée un menu en 4 parties:
    partie 1 :1 joueur (marche nickel)
    partie 2 :2 joueurs (marche nickel)
    partie 3 :ajouter un mot dans le dico(marche pas :( )
    partie 4 :regarder le dico(marche nickel)

    pourriez vous m'aidez
    car ce qui ne marche pas et que le compilateur me met:
    ligne 316
    [warning] passing arg 1 of 'toupper' makes integer from pointer without a cast

    et aussi
    ligne 318
    [warning] assignment makes pointer from integer without a cast

    bien que j'ai essayer de faire de la conversion d'un entier en caractère

    Je ne sais plus quoi faire??? :euh:
    merci pour votre aide par avance

    voici mon code
    #include <stdio.h>
    #include <stdlib.h>
    #include <ctype.h>
    #include <string.h>
    #include <time.h>



    int main()
    {
        /* explication des variables choisis
        motsecret est le mot que l'on recherche dans le pendu
        chaine est le mot secret à découvrir avec les *
        coup est le nombre de coups restant
        i est une variable de sélection d'un caractère d'une chaine
        change est le changement du nombre de coups
        lettre est la lettre rentrée par le joueur
        nbligne est le nombre de lignes du dico
        nbalatoir est le nombre aléatoire de la ligne*/

        char motsecret[29]="", chaine[29]="", motplus[29]="", letpasutilisable[10]="";
        char rep, ok, car;
        int coup, i=0, change=0,lettre=0, let, nbaleatoir=0, dico_nbmots, partie=1, choix, pos;
        char *dico[100][29];
    /*un dico avec un tableau à double entrée qui correspond à
    une ligne donne un mot
    et une colonne une lettre du mot*/

       
        //création du dictionnaire
        dico[0][29]="MAISON";
        dico[1][29]="BLEU";
        dico[2][29]="AVION";
        dico[3][29]="XYLOPHONE";
        dico[4][29]="ABEILLE";
        dico[5][29]="IMMEUBLE";
        dico[6][29]="GOURDIN";
        dico[7][29]="NEIGE";
        dico[8][29]="ZERO";

        dico_nbmots=9;
       
         //initialisation du choix aléatoire qui doit apparaître qu'une seule fois
        srand(time(NULL));
       
        //affichage de l'en-tête du jeu et de la règle de ce dernier
            printf("\\n\\n");
            printf("     **************************************\\n");
            printf("     *                                    *\\n");
            printf("     * Bienvenue dans le jeu du pendu!!!! *\\n");
            printf("     *                                    *\\n");
            printf("     **************************************\\n");
            printf("\\n\\n");
            printf("                   *****                   \\n");
            printf("                 * * * *                   \\n");
            printf("                  *O*  *                   \\n");
            printf("                   *   *   /////////////   \\n");
            printf("                   *   *   /serez vous /   \\n");
            printf("                   *   *   /  le       /   \\n");
            printf("                  * *  *   / prochain!!/   \\n");
            printf("                 *   * *   /////////////   \\n");
            printf("                       *                   \\n");
            printf("                     *****                 \\n");
            printf("\\n\\n");
           
       
        while(partie ==1)
        {
       
        //affichage d'un menu
            printf("vous devez choisir ce que vous desirez faire\\n\\n");
            printf("1. Vous desirez jouer tout seul\\n");
            printf("2. Vous desirez jouer a 2\\n");
        printf("3. Vous souhaitez ajoutez un mot dans le dictionnaire\\n");
        printf("4. Vous souhaitez consultez le dictionnaire\\n");
        printf("quelle est votre choix : ");
        scanf("%d",&choix);
           
       
        if (choix ==1)
        {
         coup=10;
         pos=0;
         for(i=0; i<10; i++)
            letpasutilisable[i]='-';
           
         //affichage de l'en-tête du jeu et de la règle de ce dernier
        printf("     **************************************\\n");
            printf("     *                                    *\\n");
            printf("     *       Voici la regle du jeu        *\\n");
            printf("     *                                    *\\n");
            printf("     **************************************\\n");
            printf("\\n\\n");
            printf("Vous devez essayer de decouvrir un mot ecrit tout en majuscule\\n");
            printf("en un nombre minimun de 10 coups. Pour cela, vous devez proposer\\n");
            printf("une lettre non accentue, si jamais la lettre se trouve dans le mot\\n");
            printf("a recherche, alors la(les) lettre(s) sera(ont) affiche(s). Sinon\\n");
            printf("vous perdez un coup. Le jeu se poursuit, jusqu'au moment ou vous ne\\n");
            printf("pouvez plus jouer, car vous n'avez plus de coup a jouer.\\n");
            printf("\\n");
            printf("\\n************ REMARQUE IMPORTANTE *************************************\\n");
            printf("\\nQuand vous tapez une lettre, vous pouvez la tape en minuscule, mais\\n");
            printf("elle NE DOIT PAS contenir de lettre accentuee.\\n\\n\\n");
            printf("************ A VOTRE PENDAISON ***************************************\\n\\n");

       
        //on se choisit un nombre aléatoire
        nbaleatoir=(int)((float)(rand() % (dico_nbmots - 1+ 1)) + 0);

        strcpy(motsecret, dico[nbaleatoir][29]);
            /*affichage du mot secret sous forme d'un nombre * qui correspond au nombre de
            caractères a trouvé ce qui initialise la recherche*/

            strcpy(chaine, motsecret);
            for (i=0; i<strlen(motsecret); i++)
            {
                if((chaine[i] != '\\0') && (chaine[i] != '\\n'))
                    chaine[i]='*';
            }
         
          printf("pret a jouer :");
          scanf("%c",&ok);//astuce pour enlever la selection '\\n' lors du choix dans le menu
          printf("c'est parti\\n");
       
         /* On commence les choses sérieuses
            en se disant tant qu'il me reste des coups à jouer, je joue.
            Ce qui parait évident, dès le début.
            Et tant que je n'ai pas gagné, je continue à jouer*/

            while((coup != 0) && (strcmp(chaine, motsecret) != 0))
            {

            /*indication du nombre de coup à jouer qui dépend de l'orthographe du mot coup
            différence entre le singulier et le pluriel*/

            if (coup !=1)
                printf("il vous reste %ld coups a jouer\\n", coup);
            else
                printf("il vous reste %ld coup a jouer\\n", coup);

             //indique les lettres deja utilisées
             printf("deja utilise : ");
             for (i=0; i<10; i++)
                   printf("%c ",letpasutilisable[i]);
             printf("\\n");
            /*indication du mot secret sous forme d'étoiles * avec apparition des lettres
            si on en a trouvé*/

            printf("quel est le mot secret : %s\\n", chaine);

            //choix de la lettre par l'utilisateur
            printf("Proposez une lettre : ");
            lettre=getchar();

            //on passe le caractère en majuscule si cela n'ai pas fait par le joueur
            lettre = toupper(lettre);

            //comparaison entre la lettre et la chaine de motsecret
            for (i=0; i<sizeof(motsecret); i++)
            {
                if (lettre == motsecret[i])
                {
                    chaine[i]=motsecret[i];
                    change++;//nb indique un changement dès qu'on trouve une bonne lettre
                }
            }

            //si on ne trouve pas une lettre adéquate alors le nombre de coups dimininue
            if (change == 0)
            {
                coup--;           
                letpasutilisable[pos]=lettre;           
                pos++;           
            }

            fflush(stdin);//on purge la sélection de la lettre tapee par le joueur

            //séparation entre chaque nouveau choix du joueur
            printf("\\n\\n");

            //réinitialisation du changement
            change=0;

            //confirmation d'avoir trouvé
            if (strcmp(chaine, motsecret) == 0)
                printf("Bravo, vous avez trouve le MOT SECRET qui est %s\\n\\n", motsecret);

            }

            //le mot de la fin avec une touche d'humour
            if (coup ==0)
        {
            printf("     ********************************\\n");
            printf("     *                              *\\n");
            printf("     *       Vous etes pendu        *\\n");
            printf("     *   Ce jeu, vous a ete fatal   *\\n");
            printf("     *       Adios Amigo            *\\n");
            printf("     *                              *\\n");
            printf("     ********************************\\n\\n");
        }
        }
       
        if(choix == 2)
        {
         coup=10;
         pos=0;
         for(i=0; i<10; i++)
            letpasutilisable[i]='-';
           
         scanf("%c",&ok);//astuce pour enlever la selection '\\n' lors de la validation du choix dans le menu
         printf("Que le  joueur 1 donne un mot que le joueur 2 devra decouvrir, pensez\\n");
         printf("a ecrire uniquement le mot sans accent ni symbole\\n");
         printf("quelle est votre mot : ");
         scanf("%s", motsecret);
         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\\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");
         
         for(i=0; i<strlen(motsecret); i++)
            motsecret[i]=toupper(motsecret[i]);
         /*affichage du mot secret sous forme d'un nombre * qui correspond au nombre de
            caractères a trouvé ce qui initialise la recherche*/

            strcpy(chaine, motsecret);
            for (i=0; i<strlen(motsecret); i++)
            {
                if((chaine[i] != '\\0') && (chaine[i] != '\\n'))
                    chaine[i]='*';
            }
         
          printf("pret a jouer :");
          scanf("%c",&ok);//astuce pour enlever la selection '\\n' lors du choix du mot
          printf("c'est parti\\n");
         
          while((coup != 0) && (strcmp(chaine, motsecret) != 0))
            {

            /*indication du nombre de coup à jouer qui dépend de l'orthographe du mot coup
            différence entre le singulier et le pluriel*/

            if (coup !=1)
                printf("il vous reste %ld coups a jouer\\n", coup);
            else
                printf("il vous reste %ld coup a jouer\\n", coup);

             printf("deja utilise : ");
             for (i=0; i<10; i++)
                   printf("%c ",letpasutilisable[i]);
             printf("\\n");
             
            /*indication du mot secret sous forme d'étoiles * avec apparition des lettres
            si on en a trouvé*/

            printf("quel est le mot secret : %s\\n", chaine);

            //choix de la lettre par l'utilisateur
            printf("Proposez une lettre : ");
            lettre=getchar();

            //on passe le caractère en majuscule si cela n'ai pas fait par le joueur
            lettre = toupper(lettre);

            //comparaison entre la lettre et la chaine de motsecret
            for (i=0; i<sizeof(motsecret); i++)
            {
                if (lettre == motsecret[i])
                {
                    chaine[i]=motsecret[i];
                    change++;//nb indique un changement dès qu'on trouve une bonne lettre
                }
            }

            //si on ne trouve pas une lettre adéquate alors le nombre de coups dimininue
            if (change == 0)
            {
                coup--;
                letpasutilisable[pos]=lettre;           
                pos++;
            }

            fflush(stdin);//on purge la sélection de la lettre tapee par le joueur

            //séparation entre chaque nouveau choix du joueur
            printf("\\n\\n");

            //réinitialisation du changement
            change=0;

            //confirmation d'avoir trouvé
            if (strcmp(chaine, motsecret) == 0)
                printf("Bravo, vous avez trouve le MOT SECRET qui est %s\\n\\n", motsecret);

            }

            //le mot de la fin avec une touche d'humour
            if (coup ==0)
        {
            printf("     ********************************\\n");
            printf("     *                              *\\n");
            printf("     *       Vous etes pendu        *\\n");
            printf("     *   Ce jeu, vous a ete fatal   *\\n");
            printf("     *       Adios Amigo            *\\n");
            printf("     *                              *\\n");
            printf("     ********************************\\n\\n");
        }   
             
        }
       
        if(choix == 3)
        {
            printf("vous avez %d definitions de mises sur un total de 100\\n", dico_nbmots);
            printf("il ne vous reste plus que %d definitions a rajouter\\n", 100-dico_nbmots);
            printf("pret : ");
            scanf("%c",&ok);//astuce pour enlever la selection '\\n' lors du choix dans le menu
            printf("c'est parti\\n");
            dico_nbmots++;
            if (dico_nbmots >100)
               printf("Vous ne pouvez plus mettre de definitions\\n");
            else
            {
               
                printf("ecrivez uniquement sans accent ni symbole\\n");
                printf("donnez votre mot :");
                scanf("%s", dico[dico_nbmots][29]);
                for(i=0; i<sizeof(dico[dico_nbmots][29]); i++)
                {
                         let=toupper(dico[dico_nbmots][i]);
                         car=let;//conversion entier en caractère
                         dico[dico_nbmots][i]=car;             
                }
                printf("Voici la definition n %d : ", dico_nbmots);
                for(i=0; i<sizeof(dico[dico_nbmots][29]); i++)
                   printf("%c",dico[dico_nbmots][i]);
                   
            }
        }
       
        if(choix == 4)
        {
           printf("vous avez %d definitions de mises sur un total de 100\\n", dico_nbmots);
           printf("pret : ");
           scanf("%c",&ok);//astuce pour enlever la selection '\\n' lors du choix dans le menu
           printf("c'est parti\\n");
           for (i=0; i<dico_nbmots; i++)
              printf("voici le %d : %s\\n", i+1, dico[i][29]);     
        }
       
        if((choix<1) || (choix>4))
        {
            printf("c'est fini pour vous!!!!\\n");
            printf("Vous ne pouvez plus jouer\\n");
        }
       
        printf("desirez vous selectionner une option dans le menu\\n");
        printf("si oui tapez o sinon tapez n\\n");
        printf("votre choix : ");
        scanf("%c", &rep);
        printf("\\n\\n");
        if (rep=='o')
           partie =1;
        else
           partie=0;
        }
       
        system("PAUSE");
            return 0;
    }


    • Partager sur Facebook
    • Partager sur Twitter
      17 août 2006 à 17:51:52

      Il faut un & à la ligne
      scanf("%s", dico[dico_nbmots][29]);
      • Partager sur Facebook
      • Partager sur Twitter
        17 août 2006 à 17:54:54

        Citation : Jano Lapin

        Il faut un & à la ligne

        scanf("%s", dico[dico_nbmots][29]);

        Faut vérifier avant de parler, non.

        C'est une chaine.

        Tes deux erreurs veulent dire que tu passes à la fonction un objet qui n'est pas exactement celui qu'elle attend.
        • Partager sur Facebook
        • Partager sur Twitter
          17 août 2006 à 19:26:07

          Oui en effet je n'avais pas vu comment dico était défini. Mais alors il y a des problèmes lors de l'initialisation du dictionnaire
          //création du dictionnaire
              dico[0][29]="MAISON";
              dico[1][29]="BLEU";
              dico[2][29]="AVION";
              dico[3][29]="XYLOPHONE";
              dico[4][29]="ABEILLE";
              dico[5][29]="IMMEUBLE";
              dico[6][29]="GOURDIN";
              dico[7][29]="NEIGE";
              dico[8][29]="ZERO";
          ce que je constate dans mon debugger. Il me semble que cela vient de l'explication 5.9 ici http://docs.mandragor.org/files/Programming_languages/C/fclc_faq_fr/fclc005.html.
          De plus je ne comprends pas l'intérêt de stocker 100*29 chaines de caractères alors qu'il me semble que le but est de stocker au maximum 100 chaines de 29 caractères maximum.

          Voici donc le code que je propose (il n'est pas parfait, il faut notamment corriger le stockage de \\n dans le buffer pour scanf ce que je laisse faire au posteur initial vu que ce sujet est revenu plusieurs fois). Il y a aussi un problème dans le numéro de stockage des mots, car au premier essai on stocke un mot en dico[10] alors que dico[9] est libre.

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



          int main()
          {
              /* explication des variables choisis
              motsecret est le mot que l'on recherche dans le pendu
              chaine est le mot secret à découvrir avec les *
              coup est le nombre de coups restant
              i est une variable de sélection d'un caractère d'une chaine
              change est le changement du nombre de coups
              lettre est la lettre rentrée par le joueur
              nbligne est le nombre de lignes du dico
              nbalatoir est le nombre aléatoire de la ligne*/

              char motsecret[29]="", chaine[29]="", motplus[29]="", letpasutilisable[10]="";
              char rep, ok, car;
              int coup, i=0, change=0,lettre=0, let, nbaleatoir=0, dico_nbmots, partie=1, choix, pos;
                  char dico[100][29]={"MAISON","BLEU","AVION","XYLOPHONE","ABEILLE","IMMEUBLE","GOURDIN","NEIGE","ZERO"};

                          /*un dico avec un tableau à double entrée qui correspond à
          une ligne donne un mot
          et une colonne une lettre du mot*/


              dico_nbmots=9;
             
               //initialisation du choix aléatoire qui doit apparaître qu'une seule fois
              srand(time(NULL));
             
              //affichage de l'en-tête du jeu et de la règle de ce dernier
                  printf("\\n\\n");
                  printf("     **************************************\\n");
                  printf("     *                                    *\\n");
                  printf("     * Bienvenue dans le jeu du pendu!!!! *\\n");
                  printf("     *                                    *\\n");
                  printf("     **************************************\\n");
                  printf("\\n\\n");
                  printf("                   *****                   \\n");
                  printf("                 * * * *                   \\n");
                  printf("                  *O*  *                   \\n");
                  printf("                   *   *   /////////////   \\n");
                  printf("                   *   *   /serez vous /   \\n");
                  printf("                   *   *   /  le       /   \\n");
                  printf("                  * *  *   / prochain!!/   \\n");
                  printf("                 *   * *   /////////////   \\n");
                  printf("                       *                   \\n");
                  printf("                     *****                 \\n");
                  printf("\\n\\n");
                 
             
              while(partie ==1)
              {
             
              //affichage d'un menu
                  printf("vous devez choisir ce que vous desirez faire\\n\\n");
                  printf("1. Vous desirez jouer tout seul\\n");
                  printf("2. Vous desirez jouer a 2\\n");
              printf("3. Vous souhaitez ajoutez un mot dans le dictionnaire\\n");
              printf("4. Vous souhaitez consultez le dictionnaire\\n");
              printf("quelle est votre choix : ");
              scanf("%d",&choix);
                 
             
              if (choix ==1)
              {
               coup=10;
               pos=0;
               for(i=0; i<10; i++)
                  letpasutilisable[i]='-';
                 
               //affichage de l'en-tête du jeu et de la règle de ce dernier
              printf("     **************************************\\n");
                  printf("     *                                    *\\n");
                  printf("     *       Voici la regle du jeu        *\\n");
                  printf("     *                                    *\\n");
                  printf("     **************************************\\n");
                  printf("\\n\\n");
                  printf("Vous devez essayer de decouvrir un mot ecrit tout en majuscule\\n");
                  printf("en un nombre minimun de 10 coups. Pour cela, vous devez proposer\\n");
                  printf("une lettre non accentue, si jamais la lettre se trouve dans le mot\\n");
                  printf("a recherche, alors la(les) lettre(s) sera(ont) affiche(s). Sinon\\n");
                  printf("vous perdez un coup. Le jeu se poursuit, jusqu'au moment ou vous ne\\n");
                  printf("pouvez plus jouer, car vous n'avez plus de coup a jouer.\\n");
                  printf("\\n");
                  printf("\\n************ REMARQUE IMPORTANTE *************************************\\n");
                  printf("\\nQuand vous tapez une lettre, vous pouvez la tape en minuscule, mais\\n");
                  printf("elle NE DOIT PAS contenir de lettre accentuee.\\n\\n\\n");
                  printf("************ A VOTRE PENDAISON ***************************************\\n\\n");

             
              //on se choisit un nombre aléatoire
              nbaleatoir=(int)((float)(rand() % (dico_nbmots - 1+ 1)) + 0);

              strcpy(motsecret, dico[nbaleatoir][29]);
                  /*affichage du mot secret sous forme d'un nombre * qui correspond au nombre de
                  caractères a trouvé ce qui initialise la recherche*/

                  strcpy(chaine, motsecret);
                  for (i=0; i<strlen(motsecret); i++)
                  {
                      if((chaine[i] != '\\\\0') && (chaine[i] != '\\n'))
                          chaine[i]='*';
                  }
               
                printf("pret a jouer :");
                scanf("%c",&ok);//astuce pour enlever la selection '\\n' lors du choix dans le menu
                printf("c'est parti\\n");
             
               /* On commence les choses sérieuses
                  en se disant tant qu'il me reste des coups à jouer, je joue.
                  Ce qui parait évident, dès le début.
                  Et tant que je n'ai pas gagné, je continue à jouer*/

                  while((coup != 0) && (strcmp(chaine, motsecret) != 0))
                  {

                  /*indication du nombre de coup à jouer qui dépend de l'orthographe du mot coup
                  différence entre le singulier et le pluriel*/

                  if (coup !=1)
                      printf("il vous reste %ld coups a jouer\\n", coup);
                  else
                      printf("il vous reste %ld coup a jouer\\n", coup);

                   //indique les lettres deja utilisées
                   printf("deja utilise : ");
                   for (i=0; i<10; i++)
                         printf("%c ",letpasutilisable[i]);
                   printf("\\n");
                  /*indication du mot secret sous forme d'étoiles * avec apparition des lettres
                  si on en a trouvé*/

                  printf("quel est le mot secret : %s\\n", chaine);

                  //choix de la lettre par l'utilisateur
                  printf("Proposez une lettre : ");
                  lettre=getchar();

                  //on passe le caractère en majuscule si cela n'ai pas fait par le joueur
                  lettre = toupper(lettre);

                  //comparaison entre la lettre et la chaine de motsecret
                  for (i=0; i<sizeof(motsecret); i++)
                  {
                      if (lettre == motsecret[i])
                      {
                          chaine[i]=motsecret[i];
                          change++;//nb indique un changement dès qu'on trouve une bonne lettre
                      }
                  }

                  //si on ne trouve pas une lettre adéquate alors le nombre de coups dimininue
                  if (change == 0)
                  {
                      coup--;           
                      letpasutilisable[pos]=lettre;           
                      pos++;           
                  }

                  fflush(stdin);//on purge la sélection de la lettre tapee par le joueur

                  //séparation entre chaque nouveau choix du joueur
                  printf("\\n\\n");

                  //réinitialisation du changement
                  change=0;

                  //confirmation d'avoir trouvé
                  if (strcmp(chaine, motsecret) == 0)
                      printf("Bravo, vous avez trouve le MOT SECRET qui est %s\\n\\n", motsecret);

                  }

                  //le mot de la fin avec une touche d'humour
                  if (coup ==0)
              {
                  printf("     ********************************\\n");
                  printf("     *                              *\\n");
                  printf("     *       Vous etes pendu        *\\n");
                  printf("     *   Ce jeu, vous a ete fatal   *\\n");
                  printf("     *       Adios Amigo            *\\n");
                  printf("     *                              *\\n");
                  printf("     ********************************\\n\\n");
              }
              }
             
              if(choix == 2)
              {
               coup=10;
               pos=0;
               for(i=0; i<10; i++)
                  letpasutilisable[i]='-';
                 
               scanf("%c",&ok);//astuce pour enlever la selection '\\n' lors de la validation du choix dans le menu
               printf("Que le  joueur 1 donne un mot que le joueur 2 devra decouvrir, pensez\\n");
               printf("a ecrire uniquement le mot sans accent ni symbole\\n");
               printf("quelle est votre mot : ");
               scanf("%s", motsecret);
               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\\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");
               
               for(i=0; i<strlen(motsecret); i++)
                  motsecret[i]=toupper(motsecret[i]);
               /*affichage du mot secret sous forme d'un nombre * qui correspond au nombre de
                  caractères a trouvé ce qui initialise la recherche*/

                  strcpy(chaine, motsecret);
                  for (i=0; i<strlen(motsecret); i++)
                  {
                      if((chaine[i] != '\\\\0') && (chaine[i] != '\\n'))
                          chaine[i]='*';
                  }
               
                printf("pret a jouer :");
                scanf("%c",&ok);//astuce pour enlever la selection '\\n' lors du choix du mot
                printf("c'est parti\\n");
               
                while((coup != 0) && (strcmp(chaine, motsecret) != 0))
                  {

                  /*indication du nombre de coup à jouer qui dépend de l'orthographe du mot coup
                  différence entre le singulier et le pluriel*/

                  if (coup !=1)
                      printf("il vous reste %ld coups a jouer\\n", coup);
                  else
                      printf("il vous reste %ld coup a jouer\\n", coup);

                   printf("deja utilise : ");
                   for (i=0; i<10; i++)
                         printf("%c ",letpasutilisable[i]);
                   printf("\\n");
                   
                  /*indication du mot secret sous forme d'étoiles * avec apparition des lettres
                  si on en a trouvé*/

                  printf("quel est le mot secret : %s\\n", chaine);

                  //choix de la lettre par l'utilisateur
                  printf("Proposez une lettre : ");
                  lettre=getchar();

                  //on passe le caractère en majuscule si cela n'ai pas fait par le joueur
                  lettre = toupper(lettre);

                  //comparaison entre la lettre et la chaine de motsecret
                  for (i=0; i<sizeof(motsecret); i++)
                  {
                      if (lettre == motsecret[i])
                      {
                          chaine[i]=motsecret[i];
                          change++;//nb indique un changement dès qu'on trouve une bonne lettre
                      }
                  }

                  //si on ne trouve pas une lettre adéquate alors le nombre de coups dimininue
                  if (change == 0)
                  {
                      coup--;
                      letpasutilisable[pos]=lettre;           
                      pos++;
                  }

                  fflush(stdin);//on purge la sélection de la lettre tapee par le joueur

                  //séparation entre chaque nouveau choix du joueur
                  printf("\\n\\n");

                  //réinitialisation du changement
                  change=0;

                  //confirmation d'avoir trouvé
                  if (strcmp(chaine, motsecret) == 0)
                      printf("Bravo, vous avez trouve le MOT SECRET qui est %s\\n\\n", motsecret);

                  }

                  //le mot de la fin avec une touche d'humour
                  if (coup ==0)
              {
                  printf("     ********************************\\n");
                  printf("     *                              *\\n");
                  printf("     *       Vous etes pendu        *\\n");
                  printf("     *   Ce jeu, vous a ete fatal   *\\n");
                  printf("     *       Adios Amigo            *\\n");
                  printf("     *                              *\\n");
                  printf("     ********************************\\n\\n");
              }   
                   
              }
             
              if(choix == 3)
              {
                  printf("vous avez %d definitions de mises sur un total de 100\\n", dico_nbmots);
                  printf("il ne vous reste plus que %d definitions a rajouter\\n", 100-dico_nbmots);
                  printf("pret : ");
                  scanf("%c",&ok);//astuce pour enlever la selection '\\n' lors du choix dans le menu
                  printf("c'est parti\\n");
                  dico_nbmots++;
                  if (dico_nbmots >100)
                     printf("Vous ne pouvez plus mettre de definitions\\n");
                  else
                  {
                     
                      printf("ecrivez uniquement sans accent ni symbole\\n");
                      printf("donnez votre mot :");
                      scanf("%s", dico[dico_nbmots]);
                      for(i=0; i<strlen(dico[dico_nbmots]); i++)
                      {
                               let=toupper(dico[dico_nbmots][i]);
                               car=let;//conversion entier en caractère
                               dico[dico_nbmots][i]=car;             
                      }
                      printf("Voici la definition n %d : ", dico_nbmots);           
                                  printf("%s",dico[dico_nbmots]);
                         
                  }
              }
             
              if(choix == 4)
              {
                 printf("vous avez %d definitions de mises sur un total de 100\\n", dico_nbmots);
                 printf("pret : ");
                 scanf("%c",&ok);//astuce pour enlever la selection '\\n' lors du choix dans le menu
                 printf("c'est parti\\n");
                 for (i=0; i<dico_nbmots; i++)
                    printf("voici le %d : %s\\n", i+1, dico[i][29]);     
              }
             
              if((choix<1) || (choix>4))
              {
                  printf("c'est fini pour vous!!!!\\n");
                  printf("Vous ne pouvez plus jouer\\n");
              }
             
              printf("desirez vous selectionner une option dans le menu\\n");
              printf("si oui tapez o sinon tapez n\\n");
              printf("votre choix : ");
              scanf("%c", &rep);
              printf("\\n\\n");
              if (rep=='o')
                 partie =1;
              else
                 partie=0;
              }
             
              system("PAUSE");
                  return 0;
          }

          • Partager sur Facebook
          • Partager sur Twitter
            18 août 2006 à 10:15:20

            je vous remercie pour vos réponses ;)
            j'ai retesté le mécanisme complet
            et je me suis aperçu que la proposition 4 du menu, ne fonctionnait plus donc j'ai apporté quelques petite modifications
            maintenant tout marche impec
            un grand merci
            voici les modif apportés:

            modif 1


            if(choix == 3)
                {
                    printf("vous avez %d definitions de mises sur un total de 100\\n", dico_nbmots);
                    printf("il ne vous reste plus que %d definitions a rajouter\\n", 100-dico_nbmots);
                    printf("pret : ");
                    scanf("%c",&ok);//astuce pour enlever la selection '\\n' lors du choix dans le menu
                    printf("c'est parti\\n");
                    dico_nbmots++;
                    if (dico_nbmots >100)
                       printf("Vous ne pouvez plus mettre de definitions\\n");
                    else
                    {
                       
                        printf("ecrivez uniquement sans accent ni symbole\\n");
                        printf("donnez votre mot :");
                        scanf("%s", dico[dico_nbmots-1]);
                        for(i=0; i<strlen(dico[dico_nbmots-1]); i++)
                        {
                                 let=toupper(dico[dico_nbmots-1][i]);
                                 car=let;//conversion entier en caractère
                                 dico[dico_nbmots-1][i]=car;             
                        }
                        printf("Voici la definition n %d : ", dico_nbmots);           
                        printf("%s\\n",dico[dico_nbmots-1]);
                        scanf("%c",&ok);//astuce pour enlever '\\n' lors de la validation du mot           
                           
                    }
                }
               
                if(choix == 4)
                {
                   printf("vous avez %d definitions de mises sur un total de 100\\n", dico_nbmots);
                   printf("pret : ");
                   scanf("%c",&ok);//astuce pour enlever la selection '\\n' lors du choix dans le menu
                   printf("c'est parti\\n");
                   for (i=0; i<dico_nbmots; i++)
                      printf("voici le %d : %s\\n", i+1, dico[i]);   
                }


            modif 2


            //on se choisit un nombre aléatoire
                nbaleatoir=(int)((float)(rand() % (dico_nbmots - 1+ 1)) + 0);

                strcpy(motsecret, dico[nbaleatoir]);


            Maintenant, je vais essayer encore de l'améliorer en essayant de mettre des mots avec traits d'unions et ce sera fini.
            Encore un grand merci pour votre aide
            • Partager sur Facebook
            • Partager sur Twitter
              18 août 2006 à 10:27:00


              fflush(stdin);


              Avec ça, le comportement de ton programme est indéterminé. Le comportement de fflush n'est défini que pour les flux sortants
              • Partager sur Facebook
              • Partager sur Twitter
                18 août 2006 à 12:49:03

                Voilà,
                c'est fini
                mais fflush n'auras rien car le trait d'union est mis, il ne faut pas le rentrez.
                voici mon code programme
                dites moi, ce que vous en pensez???? :-°
                le seul petit hic que je lui reproche, c'est l'utilisation de "ok" qui ne sert à rien d'autre que d'enlever '\\n' qui casse les pieds de temps à autre


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



                int main()
                {
                    /* explication des variables choisis
                    motsecret est le mot que l'on recherche dans le pendu
                    chaine est le mot secret à découvrir avec les *
                    coup est le nombre de coups restant
                    i est une variable de sélection d'un caractère d'une chaine
                    change est le changement du nombre de coups
                    lettre est la lettre rentrée par le joueur
                    nbligne est le nombre de lignes du dico
                    nbalatoir est le nombre aléatoire de la ligne*/

                    char motsecret[29]="", chaine[29]="", motplus[29]="", letpasutilisable[10]="";
                    char rep, ok, car;
                    int coup, i=0, change=0,lettre=0, let, nbaleatoir=0, dico_nbmots, partie=1, choix, pos;
                    char dico[100][29]={"MAISON","BLEU","AVION","XYLOPHONE","ABEILLE","IMMEUBLE","GOURDIN","NEIGE","ZERO"};

                                /*un dico avec un tableau à double entrée qui correspond à
                une ligne donne un mot
                et une colonne une lettre du mot*/


                    dico_nbmots=9;
                   
                     //initialisation du choix aléatoire qui doit apparaître qu'une seule fois
                    srand(time(NULL));
                   
                    //affichage de l'en-tête du jeu et de la règle de ce dernier
                    printf("\\n\\n");
                    printf("     **************************************\\n");
                    printf("     *                                    *\\n");
                    printf("     * Bienvenue dans le jeu du pendu!!!! *\\n");
                    printf("     *                                    *\\n");
                    printf("     **************************************\\n");
                    printf("\\n\\n");
                    printf("                   *****                   \\n");
                    printf("                 * * * *                   \\n");
                    printf("                  *O*  *                   \\n");
                    printf("                   *   *   /////////////   \\n");
                    printf("                   *   *   /serez vous /   \\n");
                    printf("                   *   *   /  le       /   \\n");
                    printf("                  * *  *   / prochain!!/   \\n");
                    printf("                 *   * *   /////////////   \\n");
                    printf("                       *                   \\n");
                    printf("                     *****                 \\n");
                    printf("\\n\\n");
                       
                   
                    while(partie ==1)
                    {
                   
                    //affichage d'un menu
                    printf("vous devez choisir ce que vous desirez faire\\n\\n");
                    printf("1. Vous desirez jouer tout seul\\n");
                    printf("2. Vous desirez jouer a 2\\n");
                    printf("3. Vous souhaitez ajoutez un mot dans le dictionnaire\\n");
                    printf("4. Vous souhaitez consultez le dictionnaire\\n");
                    printf("quelle est votre choix : ");
                    scanf("%d",&choix);
                       
                   
                    if (choix ==1)
                    {
                     coup=10;
                     pos=0;
                     for(i=0; i<10; i++)
                        letpasutilisable[i]='-';
                       
                     //affichage de l'en-tête du jeu et de la règle de ce dernier
                    printf("     **************************************\\n");
                        printf("     *                                    *\\n");
                        printf("     *       Voici la regle du jeu        *\\n");
                        printf("     *                                    *\\n");
                        printf("     **************************************\\n");
                        printf("\\n\\n");
                        printf("Vous devez essayer de decouvrir un mot ecrit tout en majuscule\\n");
                        printf("en un nombre minimun de 10 coups. Pour cela, vous devez proposer\\n");
                        printf("une lettre non accentue, si jamais la lettre se trouve dans le mot\\n");
                        printf("a recherche, alors la(les) lettre(s) sera(ont) affiche(s). Sinon\\n");
                        printf("vous perdez un coup. Le jeu se poursuit, jusqu'au moment ou vous ne\\n");
                        printf("pouvez plus jouer, car vous n'avez plus de coup a jouer.\\n");
                        printf("\\n");
                        printf("\\n************ REMARQUE IMPORTANTE *************************************\\n");
                        printf("\\nQuand vous tapez une lettre, vous pouvez la tape en minuscule, mais\\n");
                        printf("elle NE DOIT PAS contenir de lettre accentuee.\\n\\n\\n");
                        printf("************ A VOTRE PENDAISON ***************************************\\n\\n");

                   
                    //on se choisit un nombre aléatoire
                    nbaleatoir=(int)((float)(rand() % (dico_nbmots - 1+ 1)) + 0);

                    strcpy(motsecret, dico[nbaleatoir]);
                        /*affichage du mot secret sous forme d'un nombre * qui correspond au nombre de
                        caractères a trouvé ce qui initialise la recherche*/

                        strcpy(chaine, motsecret);
                        for (i=0; i<strlen(motsecret); i++)
                        {
                            if((chaine[i] != '\\0') && (chaine[i] != '\\n'))
                            {   
                                if(chaine[i] != '-')
                                   chaine[i]='*';
                                else
                                   chaine[i]='-';
                            }
                        }
                     
                      scanf("%c",&ok);//astuce pour enlever la selection '\\n' lors du choix dans le menu
                         
                     /* On commence les choses sérieuses
                        en se disant tant qu'il me reste des coups à jouer, je joue.
                        Ce qui parait évident, dès le début.
                        Et tant que je n'ai pas gagné, je continue à jouer*/

                        while((coup != 0) && (strcmp(chaine, motsecret) != 0))
                        {

                        /*indication du nombre de coup à jouer qui dépend de l'orthographe du mot coup
                        différence entre le singulier et le pluriel*/

                        if (coup !=1)
                            printf("il vous reste %ld coups a jouer\\n", coup);
                        else
                            printf("il vous reste %ld coup a jouer\\n", coup);

                         //indique les lettres deja utilisées
                         printf("deja utilise : ");
                         for (i=0; i<10; i++)
                               printf("%c ",letpasutilisable[i]);
                         printf("\\n");
                        /*indication du mot secret sous forme d'étoiles * avec apparition des lettres
                        si on en a trouvé*/

                        printf("quel est le mot secret : %s\\n", chaine);

                        //choix de la lettre par l'utilisateur
                        printf("Proposez une lettre : ");
                        lettre=getchar();

                        //on passe le caractère en majuscule si cela n'ai pas fait par le joueur
                        lettre = toupper(lettre);

                        //comparaison entre la lettre et la chaine de motsecret
                        for (i=0; i<sizeof(motsecret); i++)
                        {
                            if (lettre == motsecret[i])
                            {
                                chaine[i]=motsecret[i];
                                change++;//nb indique un changement dès qu'on trouve une bonne lettre
                            }
                        }

                        //si on ne trouve pas une lettre adéquate alors le nombre de coups dimininue
                        if (change == 0)
                        {
                            coup--;           
                            letpasutilisable[pos]=lettre;           
                            pos++;           
                        }

                        fflush(stdin);//on purge la sélection de la lettre tapee par le joueur

                        //séparation entre chaque nouveau choix du joueur
                        printf("\\n\\n");

                        //réinitialisation du changement
                        change=0;

                        //confirmation d'avoir trouvé
                        if (strcmp(chaine, motsecret) == 0)
                            printf("Bravo, vous avez trouve le MOT SECRET qui est %s\\n\\n", motsecret);

                        }

                        //le mot de la fin avec une touche d'humour
                        if (coup ==0)
                    {
                        printf("     ********************************\\n");
                        printf("     *                              *\\n");
                        printf("     *       Vous etes pendu        *\\n");
                        printf("     *   Ce jeu, vous a ete fatal   *\\n");
                        printf("     *       Adios Amigo            *\\n");
                        printf("     *                              *\\n");
                        printf("     ********************************\\n\\n");
                    }
                    }
                   
                    if(choix == 2)
                    {
                     coup=10;
                     pos=0;
                     for(i=0; i<10; i++)
                        letpasutilisable[i]='-';
                       
                     scanf("%c",&ok);//astuce pour enlever la selection '\\\\n' lors de la validation du choix dans le menu
                     printf("Que le  joueur 1 donne un mot que le joueur 2 devra decouvrir, pensez\\n");
                     printf("a ecrire uniquement le mot sans accent ni symbole le trait d'union est accepte\\n");
                     printf("quelle est votre mot : ");
                     scanf("%s", motsecret);
                     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\\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");
                     
                     for(i=0; i<strlen(motsecret); i++)
                        motsecret[i]=toupper(motsecret[i]);
                     /*affichage du mot secret sous forme d'un nombre * qui correspond au nombre de
                        caractères a trouvé ce qui initialise la recherche*/

                        strcpy(chaine, motsecret);
                        for (i=0; i<strlen(motsecret); i++)
                        {
                            if((chaine[i] != '\\0') && (chaine[i] != '\\n'))
                            {   
                                if(chaine[i] != '-')
                                   chaine[i]='*';
                                else
                                   chaine[i]='-';
                            }
                        }
                     
                      scanf("%c",&ok);//astuce pour enlever la selection '\\\\n' lors du choix du mot
                           
                      while((coup != 0) && (strcmp(chaine, motsecret) != 0))
                        {

                        /*indication du nombre de coup à jouer qui dépend de l'orthographe du mot coup
                        différence entre le singulier et le pluriel*/

                        if (coup !=1)
                            printf("il vous reste %ld coups a jouer\\n", coup);
                        else
                            printf("il vous reste %ld coup a jouer\\n", coup);

                         printf("deja utilise : ");
                         for (i=0; i<10; i++)
                               printf("%c ",letpasutilisable[i]);
                         printf("\\n");
                         
                        /*indication du mot secret sous forme d'étoiles * avec apparition des lettres
                        si on en a trouvé*/

                        printf("quel est le mot secret : %s\\n", chaine);

                        //choix de la lettre par l'utilisateur
                        printf("Proposez une lettre : ");
                        lettre=getchar();

                        //on passe le caractère en majuscule si cela n'ai pas fait par le joueur
                        lettre = toupper(lettre);

                        //comparaison entre la lettre et la chaine de motsecret
                        for (i=0; i<sizeof(motsecret); i++)
                        {
                            if (lettre == motsecret[i])
                            {
                                chaine[i]=motsecret[i];
                                change++;//nb indique un changement dès qu'on trouve une bonne lettre
                            }
                        }

                        //si on ne trouve pas une lettre adéquate alors le nombre de coups dimininue
                        if (change == 0)
                        {
                            coup--;
                            letpasutilisable[pos]=lettre;           
                            pos++;
                        }

                        fflush(stdin);//on purge la sélection de la lettre tapee par le joueur

                        //séparation entre chaque nouveau choix du joueur
                        printf("\\n\\n");

                        //réinitialisation du changement
                        change=0;

                        //confirmation d'avoir trouvé
                        if (strcmp(chaine, motsecret) == 0)
                            printf("Bravo, vous avez trouve le MOT SECRET qui est %s\\n\\n", motsecret);

                        }

                        //le mot de la fin avec une touche d'humour
                        if (coup ==0)
                    {
                        printf("     ********************************\\n");
                        printf("     *                              *\\n");
                        printf("     *       Vous etes pendu        *\\n");
                        printf("     *   Ce jeu, vous a ete fatal   *\\n");
                        printf("     *       Adios Amigo            *\\n");
                        printf("     *                              *\\n");
                        printf("     ********************************\\n\\n");
                    }   
                         
                    }
                   
                    if(choix == 3)
                    {
                        printf("vous avez %d definitions de mises sur un total de 100\\n", dico_nbmots);
                        printf("il ne vous reste plus que %d definitions a rajouter\\n", 100-dico_nbmots);       
                        scanf("%c",&ok);//astuce pour enlever la selection '\\n' lors du choix dans le menu
                        dico_nbmots++;
                        if (dico_nbmots >100)
                           printf("Vous ne pouvez plus mettre de definitions\\n");
                        else
                        {
                           
                            printf("ecrivez uniquement sans accent ni symbole\\n");
                            printf("donnez votre mot :");
                            scanf("%s", dico[dico_nbmots-1]);
                            for(i=0; i<strlen(dico[dico_nbmots-1]); i++)
                            {
                                     let=toupper(dico[dico_nbmots-1][i]);
                                     car=let;//conversion entier en caractère
                                     dico[dico_nbmots-1][i]=car;             
                            }
                            printf("Voici la definition n %3d : ", dico_nbmots);           
                            printf("%s\\n",dico[dico_nbmots-1]);
                            scanf("%c",&ok);//astuce pour enlever '\\n' lors de la validation du mot           
                               
                        }
                    }
                   
                    if(choix == 4)
                    {
                       printf("vous avez %d definitions de mises sur un total de 100\\n", dico_nbmots);
                       scanf("%c",&ok);//astuce pour enlever la selection '\\n' lors du choix dans le menu
                       for (i=0; i<dico_nbmots; i++)
                          printf("voici le %3d : %s\\n", i+1, dico[i]);   
                    }
                   
                    if((choix<1) || (choix>4))
                    {
                        printf("c'est fini pour vous!!!!\\n");
                        printf("Vous ne pouvez plus jouer\\n");
                    }
                   
                    printf("desirez vous selectionner une option dans le menu\\n");
                    printf("si oui tapez o sinon tapez n\\n");
                    printf("votre choix : ");
                    scanf("%c", &rep);
                    printf("\\n\\n");
                    if (rep=='o')
                       partie =1;
                    else
                       partie=0;
                    }
                   
                    system("PAUSE");
                        return 0;
                }
                • Partager sur Facebook
                • Partager sur Twitter

                amélioration du pendu

                × 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