Partage
  • Partager sur Facebook
  • Partager sur Twitter

Les conditions le switch

Case 1 vers quel printf ?

Sujet résolu
    17 décembre 2021 à 11:05:38

    Bonjour,

    Je me pose une question sur la partie "Les conditions" du cours de programmation C de Mathieu Nebra et particulièrement sur le switch. 

    Dans l'exemple du cours, création d'un menu, nous mettons "case 1", "case 2"... 

    Si je tape 1, cela sélectionne le menu correspondant au choix 1. Cependant, dans le code, cela renvoie en fait au deuxième printf.

    Pourquoi cela n'affiche pas : === Menu === ?

    Je n'arrive pas a comprendre la logique :euh:

    Merci a toutes et tous ! 

    Bonne journée,

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
      int choixMenu;
      
      printf("=== Menu ===\n\n");
      printf("1. Royal Cheese\n");
      printf("2. Mc Deluxe\n");
      printf("3. Mc Bacon\n");
      printf("4. Big Mac\n");
      printf("\nVotre choix ? ");
      scanf("%d", &choixMenu);
      
      printf("\n");
      
      switch (choixMenu)
      {
        case 1:
           printf("Vous avez choisi le Royal Cheese. Bon choix !");
           break;
        case 2:
           printf("Vous avez choisi le Mc Deluxe. Berk, trop de sauce...");
           break;
        case 3:
           printf("Vous avez choisi le Mc Bacon. Bon, ca passe encore ca ;o)");
           break;
        case 4:
           printf("Vous avez choisi le Big Mac. Vous devez avoir tres faim !");
           break;
        default:
           printf("Vous n'avez pas rentre un nombre correct. Vous ne mangerez rien du tout !");
           break;
      }
      
      printf("\n\n");
      
      return 0;
    }



    • Partager sur Facebook
    • Partager sur Twitter
      17 décembre 2021 à 11:24:27

      Comment ça cela n'affiche pas : === Menu === ?

      C'est la première chose que ton programme affiche ! Ensuite ça n'affiche que le printf correspondant à ton choix !

      • Partager sur Facebook
      • Partager sur Twitter
      ...
        17 décembre 2021 à 11:26:41

        Bonjour,

        j'ai testé ton code comme tu l'indiques et …

        $ gcc -Wall -Wextra -o t t.c
        t.c: In function ‘main’:
        t.c:4:14: warning: unused parameter ‘argc’ [-Wunused-parameter]
            4 | int main(int argc, char *argv[])
              |          ~~~~^~~~
        t.c:4:26: warning: unused parameter ‘argv’ [-Wunused-parameter]
            4 | int main(int argc, char *argv[])
              |                    ~~~~~~^~~~~~
        ~/Desktop $ ./t
        === Menu ===
        
        1. Royal Cheese
        2. Mc Deluxe
        3. Mc Bacon
        4. Big Mac
        
        Votre choix ? 1
        
        Vous avez choisi le Royal Cheese. Bon choix !
        
        

        tout se passe correctement sur ce test.

        Es-tu certain de bien compiler et exécuter le bon programme ?

        • Partager sur Facebook
        • Partager sur Twitter
          17 décembre 2021 à 11:43:57

          Je pense que je me suis mal exprime.
          Cela fonctionne parfaitement pour moi, je cherche juste a comprendre le code. 
          Pourquoi en tapant 1 je tombe sur ---) 1. Royal Cheese et pas sur le printf précèdent dans le code (=== MENU ===) ? Sachant que dans le code j'ai plusieurs printf a la suite, le choix sélectionne le 2eme printf.


          C'est vraiment une question bête mais ca bloque ma reflexion o_O

          • Partager sur Facebook
          • Partager sur Twitter
            17 décembre 2021 à 12:05:18

            Ta question n'est pas plus compréhensible que la première !

            Un code s'exécute de haut en bas :

            Tout d'abord il t'affiche le menu :

            === Menu ===
            
            1. Royal Cheese
            2. Mc Deluxe
            3. Mc Bacon
            4. Big Mac
            
            Votre choix ?

            puis tu dois saisir un nombre affecté à une variable choixMenu

            ensuite tu donnes cette variable au swtich et en fonction de la valeur de la variable le switch va faire un saut sur le case correspondant à la valeur de la variable et il va exécuter le code qui suit le case en question. S'il rencontre un break il fait un sauf en dehors du switch vers le bas. Si aucune des valeurs ne correspond à un case il fait un saut sur le default.

            -
            Edité par rouIoude 17 décembre 2021 à 12:16:18

            • Partager sur Facebook
            • Partager sur Twitter
            ...
              17 décembre 2021 à 12:28:09

              tim44 a écrit:

              Pourquoi en tapant 1 je tombe sur ---) 1. Royal Cheese et pas sur le printf précèdent dans le code (=== MENU ===) ? Sachant que dans le code j'ai plusieurs printf a la suite, le choix sélectionne le 2eme printf.

              Ah si, tu tombes aussi sur le printf précédent ! Le printf précédent, c'est

               printf("\n");

              qui fait un simple passage à la ligne. Tu n'as pas le passage à la ligne ?

              Quant au 2ème printf du switch, c'est

              printf("Vous avez choisi le Mc Deluxe. Berk, trop de sauce...");

              Ben non : il n'y va pas (si tu tapes 1) ! (Ou alors c'est le passage à la ligne que tu comptes comme premier printf ???)

              Astuce : l'éditeur de code numérote les lignes. Sers-t'en pour désigner les printf !

              -
              Edité par robun 17 décembre 2021 à 12:28:35

              • Partager sur Facebook
              • Partager sur Twitter
                17 décembre 2021 à 12:31:09

                Le nombre de printf pour afficher ton menu n'a rien à voir avec le switch. Tu pourrais très bien afficher ton menu avec un seul printf (ou puts)

                printf("=== Menu ===\n\n1. Royal Cheese\n2. Mc Deluxe\n3. Mc Bacon\n4. Big Mac\n\nVotre choix ? ");



                • Partager sur Facebook
                • Partager sur Twitter
                  17 décembre 2021 à 17:47:43

                  Pour t'en convaincre, enlèves tous les printf avant le swittch et remplace par printf(">");
                  Tu ne verras plus ton menu.
                  Et si tu tapes 1, tu auras le choix correspondant à 1.
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Le Tout est souvent plus grand que la somme de ses parties.

                    17 décembre 2021 à 18:12:39

                    Dans ton cas, le switch correspond ce code
                    if(choixMenu==1)
                    	printf("Vous avez choisi le Royal Cheese. Bon choix !");
                    else if(choixMenu==2)
                    	printf("Vous avez choisi le Mc Deluxe. Berk, trop de sauce...");
                    else if(choixMenu==3)
                    	printf("Vous avez choisi le Mc Bacon. Bon, ca passe encore ca ;o)");
                    else if(choixMenu==4)
                    	printf("Vous avez choisi le Big Mac. Vous devez avoir tres faim !");
                    else
                    	printf("Vous n'avez pas rentre un nombre correct. Vous ne mangerez rien du tout !");
                          
                    • Partager sur Facebook
                    • Partager sur Twitter

                    On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                      17 décembre 2021 à 18:37:08

                      @rouloude, @whitecrow, @robun, @magma

                      Je me suis emmêlé les pinceaux, j'ai tout compris ! Merci. J'ai mélangé les printf du début et ceux du switch :colere: 

                      @PierrotLeFou, @edgarjacobs, 

                      Votre retour m'a bien aide c'est bien clair maintenant.

                      Je cherche a comprendre la logique pour mieux assimiler le language C... Il me faut encore du temps 

                      MERCI BEAUCOUP !!!

                      • Partager sur Facebook
                      • Partager sur Twitter
                        4 janvier 2022 à 8:41:44

                        La lecture de la réponse sous forme d'entier est la source d'emmerdements en cascade (échec de la conversion....)

                        char reponse;
                        scanf("%c", &reponse);
                        
                        switch (reponse) {
                           case '1' : 
                               ....


                        Et puis r ou R pour Royal, b pour Bacon etc, c'est quand même mieux.

                        -
                        Edité par michelbillaud 4 janvier 2022 à 8:46:16

                        • Partager sur Facebook
                        • Partager sur Twitter
                          4 janvier 2022 à 10:30:17

                          Michel ! Tu déterre les sujets de 2021 ? C'est fini 2021 ! on est en 2022 ! :magicien:
                          • Partager sur Facebook
                          • Partager sur Twitter
                          ...

                          Les conditions le switch

                          × 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