Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C] Plus Moins, ammelioration...

...et problèmes :p

    2 mai 2006 à 18:06:58

    Bonjour à tous,
    je travaillais sur le jeu du Plus Moins et je suis arrivé à ceci :


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

    int main(void)
      {
        srand (time (NULL));
        const MIN = 1;
        long gaming = 0, compteur = 0, nombreMystere, difficult, mode, choix, MAX;
        char saisie[6], newgame[3];
        do
          {
            if (gaming != 1)
              {
                printf ("\n\nPlus +\n");
                printf ("     - Moins\n\n");
                printf ("_____________\n\n");
                printf (" -=-=-=-=-=-\n");
                printf ("|   MeNu    |\n");
                printf (" -=-=-=-=-=-\n\n");
                printf ("[Difficulte] :\n");
                printf ("1 : Facile (1 - 100)\n");
                printf ("2 : Moyen (1 - 1000)\n");
                printf ("3 : Difficile (1 - 10000)\n\n");
                do
                  {
                    //fflush (stdin);
                    printf ("Votre choix ?\n");
                    fflush (stdout);
                    fgets (saisie,sizeof saisie,stdin);
                    difficult = atol(saisie);
                  }
                while (difficult != 1 && difficult != 2 && difficult != 3);
                switch (difficult)
                  {
                    case 1 :
                      MAX = 100;
                      break;
                    case 2 :
                      MAX = 1000;
                      break;
                    case 3:
                      MAX = 10000;
                      break;
                  }
                  printf ("Mode :\n");
                  printf ("1 : Mode 1 joueur\n");
                  printf ("2 : Mode 2 joueurs\n\n");
                  do
                    {
                      //fflush (stdin);
                      printf ("Votre choix ?\n");
                      fflush (stdout);
                      fgets (saisie,sizeof saisie,stdin);
                      mode = atol (saisie);
                    }
                  while (mode != 1 && mode != 2);
                  switch (mode)
                    {
                      case 1 :
                        nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
                        break;
                      case 2 :
                        do
                          {
                            //fflush (stdin);
                            printf ("Entrer le nombre mystere compris entre 1 et "
                                    "%ld :\n",MAX);
                            fflush (stdout);
                            fgets (saisie,sizeof saisie,stdin);
                            nombreMystere = atol (saisie);
                            printf ("\n");
                          }
                          while (!(nombreMystere <= MAX && nombreMystere >= 1));
                          break;
                    }
                    gaming = 1;
                }
                compteur++;
                //fflush (stdin);
                printf ("Cherchez le nombre mystere !\nEntrer un nombre "
                        "de 1 a %ld!\n",MAX);
                fflush (stdout);
                fgets (saisie,sizeof saisie,stdin);
                choix = atol (saisie);
                if (choix == nombreMystere)
                  {
                    printf ("Bravo ! Vous avez trouvez le nombre mystere en %ld "
                            "coups ! C'etait bien %ld !\n\n",compteur,
                            nombreMystere);
                    do
                      {
                        //fflush (stdin);
                        printf ("Veux tu faire une nouvelle partie ? (Oui/Non)\n");
                        fflush (stdout);
                        fgets (saisie,4,stdin);
                        printf ("\n");
                      }
                    while (strcmp (saisie,"Oui") != 0 &&
                             strcmp (saisie,"Non") != 0);
                    sscanf(saisie, "%s",newgame);
                    if (strcmp (newgame,"Oui") == 0)
                      {
                        newgame[3] = "Non";
                        gaming = 0;
                        difficult = 0;
                        mode = 0;
                        compteur = 0;
                        nombreMystere = 0;
                      }
                  }
                else if (choix <= nombreMystere)
                  {
                    printf ("C'est plus !\n\n");
                  }
                else if (choix >= nombreMystere)
                  {
                    printf ("C'est moins !\n\n");
                  }
            }
            while (choix != nombreMystere);
            return 0;
    }


    Seulement, j'ai quelques petits problèmes, tout d'abord j'ai vu que le scanf c'est mal :D je l'ai donc remplacé par du fgets, autre problème, j'ai utilisé des fflush (stdin) (commenté dans mon code) ce qui normalement ne doit pas se faire d'après ce que j'ai vu. seulement si je les enlèves, et que je ecris par exmeple à la premiere demande de saisie "aaaaa" (je sais, normalement je dois ecrire un nombre dans mon cas) et bien le printf ("Votre choix ?\n"); s'affichera 3 fois dans ma console :



    Plus +
    - Moins

    _____________

    -=-=-=-=-=-
    | MeNu |
    -=-=-=-=-=-

    [Difficulte] :
    1 : Facile (1 - 100)
    2 : Moyen (1 - 1000)
    3 : Difficile (1 - 10000)

    Votre choix ?
    aaaaa
    Votre choix ?
    Votre choix ?
    Votre choix ?


    si je laisse le fflush (stdin), pas de problème...
    bref la saisie reste hasardeuse... et j'aimerai la corrigé.

    Comment faire pour que la saisie de la difficulté et du mode respecte ce cahier des charges :
    - usage de fgets au lieu de scanf
    - uniquement saisie d'un seul chiffre (si je tappe 1 ça marche si je tappe 11 ça marche pas si je tappe a1 ça marche pas, si je tappe 1a ça marche pas... bref un truc bien strict là dessus)
    - pas de fflush (stdin)

    Pour la saisie de la demande de nouvelle partie j'ai le même problème si je tappes "n'importe quoi" le printf se fait plusieur fois sans le fflush... bref :p faudrait que j'arrive à corriger ça

    Je ne sais pas comment m'y prendre et c'est bien pour ça que je fais appel à vous :)

    Qu'en pensez-vous ?

    McFox
    • Partager sur Facebook
    • Partager sur Twitter

    [C] Plus Moins, ammelioration...

    × 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