Partage
  • Partager sur Facebook
  • Partager sur Twitter

Un menu- ça devrait donner un message d'erreur

y a-t-il un moyen plus simple? merci

Sujet résolu
    21 août 2021 à 23:52:52

    Un menu

    Ce code est plus intéressant et concret. On crée une fonctionmenu()qui ne prend aucun paramètre en entrée. Cette fonction se contente d'afficher le menu et demande à l'utilisateur de faire un choix. La fonction renvoie le choix de l'utilisateur.

    int menu()
    {
        int choix = 0;
        
        while (choix < 1 || choix > 4)
        {
            printf("Menu :\n");
            printf("1 : Poulet de dinde aux escargots rotis a la sauce bearnaise\n");
            printf("2 : Concombres sucres a la sauce de myrtilles enrobee de chocolat\n");
            printf("3 : Escalope de kangourou saignante et sa gelee aux fraises poivree\n");
            printf("4 : La surprise du Chef (j'en salive d'avance...)\n");
            printf("Votre choix ? ");
            scanf("%d", &choix);
        }    
        
        return choix;
    }    
    
    int main(int argc, char *argv[])
    {    
        switch (menu())
        {
            case 1:
                printf("Vous avez pris le poulet\n");
                break;
            case 2:
                printf("Vous avez pris les concombres\n");
                break;
            case 3:
                printf("Vous avez pris l'escalope\n");
                break;
            case 4:
                printf("Vous avez pris la surprise du Chef. Vous etes un sacre aventurier dites donc !\n");
                break;    
        }
           
        return 0;
    }

    J'en ai profité pour améliorer le menu (par rapport à ce qu'on faisait habituellement) : la fonctionmenuaffiche à nouveau le menu tant que l'utilisateur n'a pas entré un nombre compris entre 1 et 4. Comme ça, aucun risque que la fonction renvoie un nombre qui ne figure pas au menu !

    Dans lemain, vous avez vu qu'on fait unswitch(menu()). Une fois que la fonctionmenu()est terminée, elle renvoie le choix de l'utilisateur directement dans leswitch. C'est une méthode rapide et pratique.

    À vous de jouer ! Le code est encore améliorable : on pourrait afficher un message d'erreur si l'utilisateur entre un mauvais nombre plutôt que de simplement afficher une nouvelle fois le menu.

    j'ai fait comme ci-dessous. y a-t-il un moyen plus simple?

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        int secim=0;
        
        printf("Menu:\n");
        printf("1-iskender\n");
        printf("2-durum\n");
        printf("3-kebab\n");
        printf("4-Surpriz\n");
        printf("seciminiz nedir?\n");
        scanf("%d",&secim);
        
        if (secim>0 && secim<5)
        {
            switch (secim)
            {
                case 1:
                    printf("iskender sectiniz\n");
                    break;
                case 2:
                    printf("durum sectiniz\n");
                    break;
                case 3:
                    printf("kebabi sectiniz\n");
                    break;
                case 4:
                    printf("surprizi sectiniz\n");
                    break;
                    
            }
        }
        
        else
        {
            
            while (secim<1 || secim>4)
            {
                printf("hatali giris yaptiniz Lutfen tekrar deneyin\n");
                printf("Menu:\n");
                printf("1-iskender\n");
                printf("2-durum\n");
                printf("3-kebab\n");
                printf("4-Surpriz\n");
                printf("seciminiz nedir?\n");
                scanf("%d",&secim);
            }
            
            if (secim>0 && secim<5)
            {
                switch (secim)
                {
                    case 1:
                        printf("iskender sectiniz\n");
                        break;
                    case 2:
                        printf("durum sectiniz\n");
                        break;
                    case 3:
                        printf("kebabi sectiniz\n");
                        break;
                    case 4:
                        printf("surprizi sectiniz\n");
                        break;
                        
                }
            }
            
        }
        
        return 0;
    }
    



    -
    Edité par YasinGünay 21 août 2021 à 23:53:57

    • Partager sur Facebook
    • Partager sur Twitter
      22 août 2021 à 0:10:08

      Tu passe d'un code avec fonction (ce qui était plutôt bien) à un code sans fonction (ce qui est moins bien).

      Dans ton nouveau code tu as du code qui ce répète, ce que justement les fonctions permettaient d'éviter. 

      • Partager sur Facebook
      • Partager sur Twitter
      ...
        22 août 2021 à 0:56:19

        Merci beaucoup pour votre reponse. Vous avez raison. Mais Je n'ai pas trouvé de solution avec les fonction pour faire ce qui est demandé. Est-ce que vous avez une idee? Merci
        • Partager sur Facebook
        • Partager sur Twitter
          22 août 2021 à 1:42:36

          Le code qui t'est proposé n'est pas correct?
          Modifies la fonction de menu proposée à ton goût et mets-la dans le switch du main.
          Si la fonction est correcte, tu n'auras pas besoin de redemander la valeur du choix dans le main.
          > j'ai fait comme ci-dessous. y a-t-il un moyen plus simple?
          Oui, mais tu n'est pas rendu là.
          Si tu avais vu les tableaux de chaînes, on pourrait se passer du switch, et l'affichage du menu serait simplifié.
          • Partager sur Facebook
          • Partager sur Twitter

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

            22 août 2021 à 10:17:45

            Une solution qui modifie à peine ton premier code :

            #include <stdio.h>
            
            int menu(void)
            {
                int choix = 0;
            
                while(1)
                {
                    printf("Menu :\n");
                    printf("1 : Poulet de dinde aux escargots rotis a la sauce bearnaise\n");
                    printf("2 : Concombres sucres a la sauce de myrtilles enrobee de chocolat\n");
                    printf("3 : Escalope de kangourou saignante et sa gelee aux fraises poivree\n");
                    printf("4 : La surprise du Chef (j'en salive d'avance...)\n");
                    printf("Votre choix ? ");
                    scanf("%d", &choix);
                    if(choix >= 1 && choix <= 4) break;
                    printf("choix non valide, veuillez le renouveler.\n");
                }
                return choix;
            }
            
            int main(void)
            {
                switch (menu())
                {
                    case 1:
                        printf("Vous avez pris le poulet\n");
                        break;
                    case 2:
                        printf("Vous avez pris les concombres\n");
                        break;
                    case 3:
                        printf("Vous avez pris l'escalope\n");
                        break;
                    case 4:
                        printf("Vous avez pris la surprise du Chef. Vous etes un sacre aventurier dites donc !\n");
                        break;
                }
                return 0;
            }



            • Partager sur Facebook
            • Partager sur Twitter
            ...
              22 août 2021 à 10:50:13

              delirmek a écrit:

              Le code qui t'est proposé n'est pas correct?
              Modifies la fonction de menu proposée à ton goût et mets-la dans le switch du main.
              Si la fonction est correcte, tu n'auras pas besoin de redemander la valeur du choix dans le main.
              > j'ai fait comme ci-dessous. y a-t-il un moyen plus simple?
              Oui, mais tu n'est pas rendu là.
              Si tu avais vu les tableaux de chaînes, on pourrait se passer du switch, et l'affichage du menu serait simplifié.


              Merci beaucoup pour votre reponse.
              • Partager sur Facebook
              • Partager sur Twitter
                22 août 2021 à 15:13:03

                @RouIoude: dans la fonction, au lieu de faire un break, tu pourrais faire directement le return.
                @YasinGünay: j'ai codé le problème avec un tableau de chaînes et je le fais en 19 ou 20 lignes (et en turc, svp).
                Tu remarqueras que les mots clés dans le menu sont les mêmes  que dans l'affichage du résultat.
                Voici ce code (je ne peux pas colorer, je suis aveugle et ma synthèse vocale ne me le permet pas)
                Il est tout de même indenté. Fais un copier-coller.
                Tu peux ajouter des items facilement sans changer autre chose dans le code.
                -
                #include <stdio.h>
                int menu(char *liste[], int len) {
                    int choix;
                    do {
                        printf("Menu:\n");
                        for(int i=0; i < len; i++)
                            printf("%d-%s\n", i+1, liste[i]);
                        printf("seciminiz nedir?\n");
                        scanf("%d", &choix);
                        if(choix<1 || choix>len)
                            printf("geçersiz seçim\n");
                    } while(choix<1 || choix>len);
                    return choix;
                }
                int main(void) {
                    char *items[] = { "iskender", "durum", "kebab", "Surpriz" };
                    int n = sizeof(items) / sizeof(items[0]);
                    printf("%s sectiniz\n", items[menu(items, n)-1]);
                }
                • Partager sur Facebook
                • Partager sur Twitter

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

                  23 août 2021 à 8:15:40

                  rota a écrit:

                  Une solution qui modifie à peine ton premier code :

                  #include <stdio.h>
                  
                  int menu(void)
                  {
                      int choix = 0;
                  
                      while(1)
                      {
                          printf("Menu :\n");
                          printf("1 : Poulet de dinde aux escargots rotis a la sauce bearnaise\n");
                          printf("2 : Concombres sucres a la sauce de myrtilles enrobee de chocolat\n");
                          printf("3 : Escalope de kangourou saignante et sa gelee aux fraises poivree\n");
                          printf("4 : La surprise du Chef (j'en salive d'avance...)\n");
                          printf("Votre choix ? ");
                          scanf("%d", &choix);
                          if(choix >= 1 && choix <= 4) break;
                          printf("choix non valide, veuillez le renouveler.\n");
                      }
                      return choix;
                  }
                  
                  int main(void)
                  {
                      switch (menu())
                      {
                          case 1:
                              printf("Vous avez pris le poulet\n");
                              break;
                          case 2:
                              printf("Vous avez pris les concombres\n");
                              break;
                          case 3:
                              printf("Vous avez pris l'escalope\n");
                              break;
                          case 4:
                              printf("Vous avez pris la surprise du Chef. Vous etes un sacre aventurier dites donc !\n");
                              break;
                      }
                      return 0;
                  }

                  Merci beaucoup pour votre reponse



                  • Partager sur Facebook
                  • Partager sur Twitter

                  Un menu- ça devrait donner un message d'erreur

                  × 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