Partage
  • Partager sur Facebook
  • Partager sur Twitter

Condition Switch avec plusieurs variables

Sujet résolu
    9 mai 2019 à 2:01:05

    Bonjour,

    Ma question devrait paraître simple à répondre pour certain, je suis actuellement le cour "Apprendre le langage C", j'en suis rendu au chapitre "Les Conditions" jusque là aucun soucis dans la compréhension de ce cours, je prends mon plaisir à faire des tests en regroupant tout les chapitres précedents.

    Mais Bref ma question est pour la condition "switch" est t'il possible d'utiliser des variables comprise en x et x ?

    J'ai effectuer ce test avec les conditions " if, else if, else" et aucun problème.

    exemple fig.suivante

        int age = 0;
    
        printf("\nQuel age avez-vous ?\n\n");
        scanf("%d", &age);
    
        if(age == 18) // Si l'age est supérieur ou égal à 18
        {
        printf("\nTe voila majeur, en avant l'aventure\n");
        }
        else if (age >= 4 && age <=14 ) // Sinon, si l'âge est au moins supérieur à 4
        {
            printf("\nEncore des annees a l'ecole, ETUDIE pour TON avenir!! \n");
        }
        else if (age >=15 && age <=17)
        {
            printf("\nLes annees rebelle, Fais attention à toi avant tout\n");
        }

     Mais quand je fait le test avec la condition "switch", j'ai un code erreur quand je compile qui vient probablement de ma variable à plusieur conditions, mais sa fonctionne trés bien en conditon "if".

    exemple fig.suivant

    int age = 0;
    
    printf("Quel age avez-vous ?\n");
    scanf("%d", &age);
    
    switch (age)
    {
    case >=1 && <=4:
        printf("\nSalut Bebe !\n");
        break;
    case >=5 && <=10:
        printf("\nSalut Gamin !\n");
        break;
    case >=11 && <=14:
        printf("\nSalut Jeune !\n");
        break;
    case >=15 && <=17:
        printf("\nSalut l'Ado !\n");
        break;

    Désolé si mon sujet est trés long, je ne savait pas comment expliquer mon soucis, en espèrant avoir été assez clair.
    Merci d'avance.

    -
    Edité par Med_Wo 9 mai 2019 à 2:05:50

    • Partager sur Facebook
    • Partager sur Twitter
      9 mai 2019 à 7:51:04

      désolé pour toi mais en C ce qui suit le case doit etre un entier et non pas une condition, donc ça :
      switch ( x )
      {
          case 0:
          case 1:
              break;
          default:
      }

      tu peux le faire, mais ton code non.

      Si tu veux ecrire ton code avec un switch tu peux le faire comme suis :

      int age = 0;
       
      printf("Quel age avez-vous ?\n");
      scanf("%d", &age);
       
      switch (age)
      {
          case 1:
          case 2:
          case 3:
          case 4:
              printf("\nSalut Bebe !\n");
              break;
          case 5:
          case 6:
          case 7:
          case 8:
          case 9:
          case 10:
              printf("\nSalut Gamin !\n");
              break;
          case 11:
          case 12:
          case 13:
          case 14:
              printf("\nSalut Jeune !\n");
              break;
          case 15:
          case 16:
          case 17:
              printf("\nSalut l'Ado !\n");
              break;
      }
      



      • Partager sur Facebook
      • Partager sur Twitter

      la connaissance est une chose qui ne nous appauvrit pas quand on la partage.

      Mon GitHub

        9 mai 2019 à 7:59:42

        Bonjour,

        Le switch permet d'orienter un choix à partir de valeurs prédictibles (au moins envisageables) et si possible plutôt limitées en nombre lors de la programmation. La valeur que l'on met dans les "case" doit toujours être réductible à un entier constant (∈ℤ). Il n'est pas possible d'y mettre du code, des tests, ni-même de calcul (sur des variables, "5+1" est une constante). Sinon, il n'y a plus de prédiction possible et le switch perd tout son intérêt.

        Dans l'exemple que tu donnes, la série de test est sans aucun doute le choix à faire.

        Maintenant, il peut arriver que l'on ait besoin de regrouper 2 ou plusieurs résultats, cela reste donc possible. Par exemple pour un lancer de dé :

        switch (de)
        {
          case 1:
          case 2:
          case 3:
            printf("une valeur de 1 à 3\n");
          break;
        
          case 4:
          case 5:
          case 6:
            printf("une valeur de 4 à 6\n");
          break;
        }

        Bon, ce n'est pas ce qu'il faudrait faire, mais tu vois qu'il est possible d'orienter 2 valeurs ou plus vers la même portion de code.

        En l'absence de coupure (break;) le code est exécuté à la suite, donc le cas suivant. Par exemple le jeu consiste à faire entre 4 et 6 au dé pour gagner et rester dans la course. Aussi, je veux ajouter du suspens quand on fait juste 4 :

        switch (de)
        {
          case 4:
            printf("Suspens.. !!!\n");
          case 5:
          case 6:
            printf("Bravo, tu peux continuer !\n");
          break;
        
          default:
            printf("Perdu, tu es éliminé !\n");
          break;
        }

        Je te laisse imaginer ce que ça donnerait avec ton exemple, ce ne serait pas très élégant.

        Bonne continuation.

        -
        Edité par drx 9 mai 2019 à 8:14:16

        • Partager sur Facebook
        • Partager sur Twitter

        Bonhomme !! | Jeu de plateforme : Prototype.

          9 mai 2019 à 8:06:57

          Salut,

          Certains compilateurs peuvent accepter cette syntaxe

          ...

          • Partager sur Facebook
          • Partager sur Twitter
            9 mai 2019 à 8:22:12

            @magma : Effectivement, ça fonctionne. Merci pour le truc, j'ignorais complètement cette syntaxe.

            Du coup on aura :

            int age = 0;
             
            printf("Quel age avez-vous ?\n");
            scanf("%d", &age);
             
            switch (age)
            {
            case 1 ... 4:
                printf("\nSalut Bebe !\n");
                break;
            case 5 ... 10:
                printf("\nSalut Gamin !\n");
                break;
            case 11 ... 14:
                printf("\nSalut Jeune !\n");
                break;
            case 15 ... 17:
                printf("\nSalut l'Ado !\n");
                break;
            }



            • Partager sur Facebook
            • Partager sur Twitter

            Bonhomme !! | Jeu de plateforme : Prototype.

              9 mai 2019 à 8:45:31

              magma a écrit:

              Salut,

              Certains compilateurs peuvent accepter cette syntaxe

              ...


              Merci je l'avais pas non plus celui là :)
              • Partager sur Facebook
              • Partager sur Twitter

              la connaissance est une chose qui ne nous appauvrit pas quand on la partage.

              Mon GitHub

                9 mai 2019 à 22:06:41

                Merci ox223252drx et magma d'avoir pris le temps de m'expliquer et d'avoir apporté la solution à mon problème.
                • Partager sur Facebook
                • Partager sur Twitter
                  9 mai 2019 à 23:27:56

                  Re,

                  Au final ce sera surtout magma qui nous aura tous appris quelque chose.

                  N'oublie pas de passer ton sujet en résolu. Cela permettra à d'autre de trouver cette solution intéressante s'ils ont le même problème.

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Bonhomme !! | Jeu de plateforme : Prototype.

                  Condition Switch avec plusieurs variables

                  × 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