Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme de conditions

Debutant

    18 février 2017 à 1:06:13

    Bonjour, 

    Jeune débutant amateur je me suis lancé fougueusement dans l'apprentissage du C.Mais voilà, je me heurte à certain problème de compréhension dans la lecture de certaines conditions donc voici mon code :

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int number_gen(int min,int max)
    {
        int  nombreMystere = 0;
        srand(time(NULL));
        nombreMystere = (rand() % (max - min + 1)) + min;
        return nombreMystere;
    }
    int main()
    {
        const int MIN=1,MAX=100;
        int nbS=0,win=1;
        nbS=number_gen(MIN,MAX);
        int nbEntre = 0;
        printf("---Bonjour et bienvenue dans mon jeu---\n");
        while(win){
        printf("Veuillez choisir un nombre entre 1 et 100 :\n");
        scanf("%d",&nbEntre);
        if (nbS==nbEntre)
        {
            printf("Felicitations");
            win=0;
        }
        else if ((nbEntre<=MAX)&&(nbS>nbEntre))
        {
            printf("Le nombre secret est plus grand\n");
        }
         else if (nbEntre>=MIN&&nbS<nbEntre)
        {
            printf("Le nombre secret est plus petit\n");
        }
        else
        {
            printf("Le nombre entre est invalide...\n");
        }
        // La boucle prend fin
        }
        return 0;
    }
    

    Donc lorsque j'execute le programme, et que j'entre comme réponse 111 il me répond que le nombre est plus petit mais normalement n'est il pas sensé m'afficher que le nombre est invalide ?

    • Partager sur Facebook
    • Partager sur Twitter
    "N'est normal que la différence!"
      18 février 2017 à 1:23:35

      Yop,

      Ton programme fonctionne correctement, relis bien tes conditions à tête reposée et fais bien attention aux valeurs des variables comparées :)

      La ligne 31 peut être traduite par :

      sinon si 111 est supérieur ou égal à 1 ET nbS[1-100] est inférieur à 111

      • Partager sur Facebook
      • Partager sur Twitter
        18 février 2017 à 1:24:47

        " réponse 111 il me répond que le nombre est plus petit mais normalement n'est il pas sensé m'afficher que le nombre est invalide ? "

        Non, il répond ceci car la condition ligne n°31 est vraie, donc il n'y a pas branchement dans la condition n°35.

        En dehors de ça, tu te compliques trop la vie ce qui t'amène à faire un programme moins optimisé que ce qu'il pourrait être.



        -
        Edité par ASW_ 18 février 2017 à 1:31:38

        • Partager sur Facebook
        • Partager sur Twitter
          18 février 2017 à 1:52:12

          Gem et ASW_ merci pour vos réponses mais je le jure, cela fait une heure que j'essaye de comprendre les conditions que j'ai imposée mais je ne comprend vrmt pas à part que qu'importe l'entier rentré mes deux else if sont toujours vérifié alors j'ai essayé avec des bornes mais cela ne marche pas non plus 

          voici mon code :

          #include <stdio.h>
          #include <stdlib.h>
          #include <time.h>
          
          int number_gen(int min,int max)
          {
              int  nombreMystere = 0;
              srand(time(NULL));
              nombreMystere = (rand() % (max - min + 1)) + min;
              return nombreMystere;
          }
          int main()
          {
              const int MIN=1,MAX=100;
              int nbS=0,win=1,nbCoup=0,continuer=1,nbJoueur=0,tourJoueur=0;
              while (continuer){
              nbCoup=0;
              nbS=number_gen(MIN,MAX);
              int nbEntre = 0;
              win=1;
              nbJoueur=0;
              printf("---Bonjour et bienvenue dans mon jeu---\nCombien de joueur etes vous?(1J ou 2J) :\n");
              while(nbJoueur!=1&&nbJoueur!=2){
              scanf("%d",&nbJoueur);
              }
              while(win){
              printf("Veuillez choisir un nombre entre 1 et 100 :\n");
              nbCoup+=1;
              if (nbJoueur==2)
              {
                  if(nbCoup%2==0){
                  printf("C'est au tour du joueur 2 :\n");
                  }
                  else{printf("C'est au tour du joueur 1 :\n");}
              }
              scanf("%d",&nbEntre);
              if (nbS==nbEntre)
              {
                  printf("Felicitations\n\n");
                  win=0;
              }
              else if ((MIN<=nbEntre<=MAX)&&(nbS>nbEntre)) //boucle 1 problème
          { printf("Le nombre secret est plus grand\n"); } else if ((MIN<=nbEntre<=MAX)&&(nbS<nbEntre)) //boucle 2 problème { printf("Le nombre secret est plus petit\n"); } else { printf("Le nombre entre est invalide...\n"); } // La boucle prend fin } printf("Vous avez gagne en %d coups. Voulez vous recommencer?(0-non,1-oui) :\n",nbCoup); scanf("%d",&continuer); } return 0; }



          -
          Edité par Devilmachie 18 février 2017 à 1:53:04

          • Partager sur Facebook
          • Partager sur Twitter
          "N'est normal que la différence!"
            18 février 2017 à 2:05:02

            Bonsoir,

            Tu devrais soigner la présentation, car le mélange français-anglais, l'indentation aléatoire, et les pâtés de plusieurs dizaines de caractères sans espaces, rebutent la lecture.

            Cela dit, je vois un problème dans les expressions comme MIN<=nbEntre<=MAX.
            En C, cela est interprêté comme (MIN<=nbEntre)<=MAX. Et les opérateurs de comparaisons ne peuvent produire que deux valeurs, 0 ou 1. Ce qui donne  0<=MAX ou 1<=MAX, et dans les deux cas ça vaut 1.

            -
            Edité par Marc Mongenet 18 février 2017 à 2:05:45

            • Partager sur Facebook
            • Partager sur Twitter
              18 février 2017 à 2:25:36

              Prends le temps de traduire en français ce que tu souhaites faire. Par exemple dans le style :

              • si le nombre entré est inférieur à la borne minimum ou supérieur à la borne maximum, alors il est invalide
              • sinon si le nombre entré est supérieur au nombre aléatoire, alors il est trop grand  (ici on sait que le nombre entré est valide)
              • sinon c'est qu'il est trop petit (mais on sait qu'il est dans les bornes)  (c'est la seule déduction restante)

              Il est très important aussi de faire attention à l'ordre des conditions. Une fois que tu as bien compris la problématique et que tu sais ce que tu veux faire et comment, tu peux faire la traduction en langage C.

              -
              Edité par Gam' 18 février 2017 à 2:27:07

              • Partager sur Facebook
              • Partager sur Twitter
                18 février 2017 à 2:36:00

                D'accord je vais essayer d'y réfléchir :) mais donc il y a une sorte de lazy evaluation sur les conditions

                Merci en tout cas

                • Partager sur Facebook
                • Partager sur Twitter
                "N'est normal que la différence!"

                Probleme de conditions

                × 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