Partage
  • Partager sur Facebook
  • Partager sur Twitter

[TP1] Pb avec les lettres

    23 décembre 2005 à 14:59:15

    Comment vérifier si la valeur entrée par l'utilisateur (lorsqu'on lui demande le nb de joueurs, ou la difficulté, par exemple; ou bien mm quand on lui demande le nombre) n'est pas une lettre ?
    Car si l'utilisateur tappe une lettre alors là c'est le drame ^^
    • Partager sur Facebook
    • Partager sur Twitter
      23 décembre 2005 à 15:04:48

      pour le moment il n y a pas que là que c'est le drame car si il tape une lettre ça plante !!!

      Essaye de taper plein de lettre mais vraiment plein sans valider :) la c le drame

      Pour le moment le mieux est de faire en sorte que ce que l'utilisateur va taper soit un caractére et non un chiffre !! car la demander un chiffre ne t'es absolument de aucun interet puisque tu ne vas pas traiter numériquement ce choix !
      • Partager sur Facebook
      • Partager sur Twitter
        23 décembre 2005 à 15:07:35

        Je n'ai jamais essayé fgets et atoi car je n'ai fait que du c++ jusqu'à présent mais certains semblent dire que c'est une solution.
        • Partager sur Facebook
        • Partager sur Twitter
          23 décembre 2005 à 15:57:43

          C'est simple et compliqué à la fois :

          la fonction scanf lit ce que l'utilisateur a saisi au clavier et le met à l'adresse de notre petite variable si la saisie correspond au format

          sinon il renvoit EOF d'où le drame

          La solution ? faire un contrôle d'erreur :

          /* mon scanf */
          scanf( "%d" , &decimal )

          /*controle erreur*/
          if ( decimal == EOF )
          {
          break;
          }

          En fait, vous pouvez mettre ce que vous voulez dans le if, un printf pour dire qu'il y a une erreur ou un perror => chercher dans google ...

          Amusez-vous bien.
          • Partager sur Facebook
          • Partager sur Twitter
            23 décembre 2005 à 16:01:20

            if ( decimal = EOF )

            ou

            if ( decimal == EOF )

            ??

            Car ça m'intéresse aussi ;)
            • Partager sur Facebook
            • Partager sur Twitter
              23 décembre 2005 à 16:20:56

              bien sûr c'est if ( decimal == EOF )

              Merci pour la remaque Benjitheone
              • Partager sur Facebook
              • Partager sur Twitter
                23 décembre 2005 à 17:08:50


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

                int main(int argc, char *argv[])
                {
                  long continuerPartie = 1
                   
                  while (continuerPartie) //Tourne en permanence tant que l'utilisateur ne demande pas l'arrêt
                  {
                    // Définition des différentes variables
                    long mode = 0;
                    long difficulte = 0;
                    long nombreEntre = 0;
                    long nombreMystere = 0;
                    long nombreCoups = 0 ;
                    long nombreMax = 100;
                    long nombreMin = 1
                 
                    system("CLS"); // Efface la console à chaque relance du jeu
                    printf("****************************** Plus ou Moins ******************************");

                // Choix du mode
                    printf("\n\n === Menu ===");
                    printf("\n 1. Un joueur");
                    printf("\n 2. Deux joueurs");
                    printf("\n 3. Quitter");
                    printf("\n Votre choix ? ");
                    scanf("%ld", &mode);
                   
                    if (mode == EOF)
                      mode = 0;
                   
                // Impression à l'écran du choix du mode
                    switch (mode)
                    {
                      case 1:
                        printf("\n Vous avez choisi \"un joueur\".");
                        break;
                      case 2:
                        printf("\n Vous avez choisi \"deux joueurs\".");
                        break;
                      case 3:
                        continuerPartie = 0;
                        break;
                      default :
                        printf("\n Vous avez entre un choix impossible \n\n");
                        system("PAUSE");
                    } // fermeture du switch(mode)
                   
                   
                // Choix de la difficulté
                    if (mode == 1 || mode == 2)
                    {
                      printf("\n\n === Difficulte ===");
                      printf("\n 1. de 1 a 100");
                      printf("\n 2. de 1 a 1000");
                      printf("\n 3. de 1 a 10000");
                      printf("\n 4. de 1 a 100000");
                      if (mode == 1)
                        printf("\n 5. personnalisee");
                      printf("\n Votre choix ? ");
                      scanf("%ld", &difficulte);
                     
                      if (difficulte == EOF)
                        difficulte = 0;
                       
                // Impression à l'écran de la difficulté
                      switch (difficulte)
                      {
                        case 1:
                          printf("\n Vous avez choisi le mode \"Facile\".");
                          nombreMax = 100;
                          break;
                        case 2:
                          printf("\n Vous avez choisi le mode \"Moyen\".");
                          nombreMax = 1000;
                          break;
                        case 3:
                          printf("\n Vous avez choisi le mode \"Difficile\".");
                          nombreMax = 10000;
                          break;
                        case 4:
                          printf("\n Vous avez choisi le mode \"Tres Difficile\".");
                          nombreMax = 100000;
                          break;
                        case 5:
                          if (mode == 1)
                          { 
                            printf("\n Vous avez choisi le mode \"personnalisee\".");
                            printf("\n Entrez la valeur minimale : ");
                            scanf("%ld", &nombreMin);
                            printf(" Entrez la valeur maximale : ");
                            scanf("%ld", &nombreMax);
                            // Vérification de la difficulté personnalisée
                            if (nombreMin >= nombreMax)
                            {
                              printf("\n Vous avez entre un choix impossible. \n\n");
                              difficulte = 0;
                              system("PAUSE");
                            }
                          }
                          if (mode == 2)
                          {
                            printf("\n Vous avez entre un choix impossible. \n\n");
                            system("PAUSE");
                          }
                          break;
                        default :
                          printf("\n Vous avez entre un choix impossible. \n\n");
                          system("PAUSE");
                      } // fermeture du switch(difficulte)
                   
                    } // fermeture du if(mode==1||mode==2)
                 
                   
                // Jeu en mode 1 joueur
                    if (mode == 1 && (difficulte==1||difficulte==2||difficulte==3||difficulte==4||difficulte==5))
                    {
                      srand(time(NULL));
                      nombreMystere = (rand() % (nombreMax - nombreMin + 1)) + nombreMin;
                           
                      do
                      {
                        printf("\n\n Quel est le nombre mystere ? ");
                        scanf("%ld", &nombreEntre);
                             
                        if (nombreEntre < nombreMystere)
                        {
                          printf(" C'est plus !");
                          nombreCoups++;
                        }
                        else if (nombreEntre > nombreMystere)
                        {
                          printf(" C'est moins !");
                          nombreCoups++;
                        }
                        else
                        {
                          nombreCoups++;
                          printf("\n Bravo, vous avez trouve le nombre mystere en %ld coup(s) !", nombreCoups);
                        }
                      } while (nombreEntre != nombreMystere);
                     
                      // Demande de rejouer     
                      printf("\n\n Voulez vous rejouer ?");
                      printf("\n 0. Non");
                      printf("\n 1. Oui");
                      printf("\n Votre choix ? ");
                      scanf("%ld", &continuerPartie);

                    } // fermeture du if(mode==1 && (difficulte==1||difficulte==2||difficulte==3||difficulte==4||difficulte==5))

                   
                // Jeu en mode 2 joueurs
                    if (mode == 2 && (difficulte==1||difficulte==2||difficulte==3||difficulte==4))
                    {
                      printf("\n\n Joueur 1 :");
                      printf("\n Entrez le nombre mystere (entre %ld et %ld) : ", nombreMin, nombreMax);
                      scanf("%ld", &nombreMystere);
                     
                      // Vérification de la validité du nombreMystere
                      if (nombreMystere > nombreMax)
                      {
                        printf("\n Vous avez essaye de tricher ! \n\n");
                        system("PAUSE");
                      }
                       
                      if (nombreMystere <= nombreMax)
                      {
                        system("CLS");
                        do
                        {
                          printf("\n\n Quel est le nombre mystere ? ");
                          scanf("%ld", &nombreEntre);
                               
                          if (nombreEntre < nombreMystere)
                          {
                            printf(" C'est plus !");
                            nombreCoups++;
                          }
                          else if (nombreEntre > nombreMystere)
                          {
                            printf(" C'est moins !");
                            nombreCoups++;
                          }
                          else
                          {
                            nombreCoups++;
                            printf("\n Bravo, vous avez trouve le nombre mystere en %ld coup(s) !", nombreCoups);
                          }
                        } while (nombreEntre != nombreMystere);
                       
                        printf("\n\n Voulez vous rejouer ?");
                        printf("\n 0. Non");
                        printf("\n 1. Oui");
                        printf("\n Votre choix ? ");
                        scanf("%ld", &continuerPartie);
                       
                      } // fermeture du if(nombreMystere<=nombreMax)

                    } // fermeture du if(mode==2 && (difficulte==1||difficulte==2||difficulte==3||difficulte==4))


                  } // fermeture du while(continuerPartie)
                 
                  printf("\n\n \"Plus ou Moins\" by A. Richard");
                  printf("\n Source : www.siteduzero.com");
                  printf("\n\n");
                  system("PAUSE");
                  return 0;
                }



                Voila mon code, dsl de polluer un peu avec tout ça :x
                ENfin bref, ça bugge toujours un peu si je tappes une lettre. Certes moins qu'avant, mais tout de même ... :(
                • Partager sur Facebook
                • Partager sur Twitter
                  27 décembre 2005 à 11:46:47

                  Ton code marche très bien :)si tu fais le if ( machin == EOF ) après tous tes scanf ce qui n'est pas le cas !!!
                  • Partager sur Facebook
                  • Partager sur Twitter

                  [TP1] Pb avec les lettres

                  × 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