Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme de boucle

Mc Donald's

    3 janvier 2009 à 14:11:01

    Salut a tous,
    je suis en train de faire un programme sur McDonald's, et donc voila mon code :
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
    
        long choixPlat = 0;
        long choixNuggets = 0;
        long choixFinal = 0;
    
        printf("\t*****Mc Donald's!*****\n\n\n");
        printf("Bienvenue a Mac Donald's\nQue voulez vous mangez ?\n\n");
    
    
    
    do
       {
    do {
         printf ("1.Mc Chicken\n\n");
         printf ("2.Big Mac\n\n");
         printf ("3.Cheese Burger\n\n");
         printf ("4.Chicken Mc Nuggets\n\n");
         printf ("5.Finalement vous n'avez plus faim...\n\n");
         scanf  ("%ld", &choixPlat);
    
        switch (choixPlat)
        {
          case 1:
           printf ("Un Mac Chicken ? Tres bon choix !\n\n");
          break;
    
          case 2:
           printf ("Big Mac... Excellent !!\n\n");
          break;
    
          case 3:
           printf ("Cheese Burger ? Vous n'avez pas tres faim...\n\n");
          break;
    
          case 4:
           printf ("Des Mc Nuggets ! Combien en choisissez vous ? 3-6-9-12\n\n");
           scanf ("%ld", &choixNuggets);
           switch (choixNuggets)
        {
         case 3:
          printf ("Vous avez choisis de prendre un paquet de 3 nuggets.\n\n");
         break;
    
         case 6:
          printf ("Vous avez choisis de prendre un paquet 6 nuggets.\n\n");
         break;
    
         case 9:
          printf ("Vous avez choisis de prendre un paquet de 9 nuggets.\n\n");
         break;
    
         case 12:
          printf ("Vous avez choisis de prendre un paquet de 12 nuggets.\n\n");
         break;
    
         default:
          printf ("Spece d'imbecile ! Choisis des paquets de 3,6,9 ou 12 nuggets !!\n\n");
         break;
    
        }
        break;
    
        case 5:
         printf ("Vous n'avez plus faim ?!\n\n");
        break;
    
        default:
         printf ("Il ya 5 choix ! Pas %ld !!\n\n", choixPlat);
         break;
        }
        } while (choixPlat > 5);
    
    
        printf ("Etes vous sur de votre choix ?\n\n");
        printf ("\n1.Sur et Certain !\n\n");
        printf ("2.Non, je veux choisir autre chose !\n\n");
        scanf ("%ld", &choixFinal);
    
        if (choixFinal = 1)
        {
        printf ("Tres bien, au revoir !\n\n\n\n\n");
        }
    
        else if (choixFinal == 2)
        {
        printf ("OK, pas de probleme, refaite votre choix !\n\n");
    
        }
    
        else
        {
            printf ("Abruti ! Tu dois choisir 1 ou 2 !... Les jeunes de nos jours ma parole.");
        }
    } while (choixFinal != 1);
    
    
    
    
    
        return 0;
    }
    


    Mon probleme :
    Je voudrais que, au moment du choix du nombre de nuggets, si l'utilisateur choisis un nombre non valide (les choix sont 3,6,9 ou 12) et bien le programme fait une boucle qui le fait revenir en arriere, et qui lui demande de choisir des paquets de 3,6,9 ou 12 nuggets.... Mais je ne sais pas ou placer ma boucle, et a chaque fois, code blocks se trompe avec les do, les while et les switch, if...


    Il y a aussi un problème au moment du choix finale, qui consiste a demander si le client et bien certain de son choix. Si il est satisfait de son choix, il quitte le programme (ca marche) si non, et bien une boucle le fait revenir au menu ou il pourra choisir autre chose (marche pas...). Mais a tout les coups, c'est comme si le client était satisfait de son choix, meme si il dit le contraire... (en gros, il répond qu'il n'ai pas satisfait, mais au lieu de revenir au début, le programme le remercie et lui dit au revoir...) Donc je ne sais pas comment faire, svp aidez moi


    Merci d'avance =)

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      3 janvier 2009 à 14:53:04

      if (choixFinal = 1)
      

      Il manque un =

      Citation : Moussaka

      Je voudrais que, au moment du choix du nombre de nuggets, si l'utilisateur choisis un nombre non valide (les choix sont 3,6,9 ou 12) et bien le programme fait une boucle qui le fait revenir en arriere, et qui lui demande de choisir des paquets de 3,6,9 ou 12 nuggets.... Mais je ne sais pas ou placer ma boucle, et a chaque fois, code blocks se trompe avec les do, les while et les switch, if...



      Tu peux imaginer ceci :
      Si le joueur choisit NUGGETS
      TANT QUE le joueur n'a pas choisi un bon numero
      DEMANDER numero
      • Partager sur Facebook
      • Partager sur Twitter
        3 janvier 2009 à 14:57:22

        Pour le choix final, tu as oublié un égal dans le premier if. Il faut == et pas égal.

        Pour placer ta boucle pour le choix du nombre de nugets, met une boucle autour du switch qui test le nombree de nugets, qui dure tant que le choix et différents des réponses valide (utilise des "ou" ||).

        EDIT : Et mince, on a répondu pendant que j'écrivais mon message.
        • Partager sur Facebook
        • Partager sur Twitter
          3 janvier 2009 à 15:05:44

          Merci pour ces réponses, je vais tester
          • Partager sur Facebook
          • Partager sur Twitter
            3 janvier 2009 à 17:48:35

            Gloups j'ai eu un problème en voulant corriger ce code...
            A ce niveau:

            case 4:
            
            	  printf ("Des Mc Nuggets ! Combien en choisissez vous ? 3-6-9-12\n\n");
            
            
                  do
                  {
            	   scanf ("%ld", &choixNuggets);
            
            		switch (choixNuggets)
            			{
            				case 3:
            				printf ("Vous avez choisis de prendre un paquet de 3 nuggets.\n\n");
            				break;
            
            				case 6:
            				printf ("Vous avez choisis de prendre un paquet 6 nuggets.\n\n");
            				break;
            
            				case 9:
            				printf ("Vous avez choisis de prendre un paquet de 9 nuggets.\n\n");
            				break;
            
            				case 12:
            				printf ("Vous avez choisis de prendre un paquet de 12 nuggets.\n\n");
            				break;
            
            				default:
            				printf ("Spece d'imbecile ! Choisis des paquets de 3,6,9 ou 12 nuggets !!\n\n");
            				break;
            			}
            
                }while(choixNuggets != 3 || 6 || 9 || 12);
                break;
            


            Je n'arrive pas à sortir de la boucle (j'ai l'impression que je ne maitrise pas les conditions "ou" ||).
            • Partager sur Facebook
            • Partager sur Twitter
              3 janvier 2009 à 18:46:00

              bonjour :
              while(choixNuggets != 3 || 6 || 9 || 12);
              

              je l'écrirai plutot :
              while( (choixNuggets != 3) || (choixNuggets != 6) || 
                     (choixNuggets != 9) || (choixNuggets != 12) );
              
              @+
              • Partager sur Facebook
              • Partager sur Twitter
                3 janvier 2009 à 18:49:24

                il faut des &&
                pour recommencer, il faut qu'il soit différent et de 3, et de 6, et de neuf, et de douze
                • Partager sur Facebook
                • Partager sur Twitter
                  3 janvier 2009 à 18:52:10

                  non "zx-spectrum " j'ai testé ca revient au même, on reste dans la boucle...
                  Je vais tenter la methode de && (j'avais pas pensé à le faire dans l'autre sens)

                  Et bien quand j'essaye je reste toujours dans la boucle :euh:
                  Il s'affiche "vous avez choisi tant de nugets" puis plus rien quelle que soit la touche sur laquelle j'appuie. J'ai l'impression qu'on est bloqué à la fin de la boucle, on ne sort pas on ne reboucle pas.

                  Peut être que j'ai une erreur ailleur dans le programme (j'ai repris celui du PO ^^)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    3 janvier 2009 à 18:54:34

                    NON! pas dans l'autre sens!
                    Réfléchi, je sais que ces hard, ces trucs, mais c'est tout ce qu'il y a de plus logique!

                    p.s: tu voulais bien dire && == && == && ==?
                    Ca, ca marchera jamais!
                    • Partager sur Facebook
                    • Partager sur Twitter
                      3 janvier 2009 à 19:11:30

                      Si en fait ca marche, j'ai fait " while( choixNuggets != 3 && choixNuggets != 6 && choixNuggets != 9 && choixNuggets != 12 ); "

                      Mais je comprends pas pourquoi... des || m'auraient semblés plus logique.

                      Puis je retire ce que j'ai dis plus haut, "zx-spectrum " avait raison mon code etait faux.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        3 janvier 2009 à 19:52:36

                        Citation : moi

                        p.s: tu voulais bien dire && == && == && ==?
                        Ca, ca marchera jamais!


                        Je pensais que tu voulais dire ca, par inverse.

                        Tu ne peux pas mettre des ou tout simplement parce que la boucle serait toujours vraie:
                        while(choixNuggets != 3 || 6 || 9 || 12);
                        


                        imaginons que le choix soit 3.
                        choixNuggets != 3? non, il vaut trois
                        Mais ou bien, est-il différent de 6?, ca oui vu qu'il vaut trois,
                        => on fait la boucle!
                        Dsl, je suis vraiment naze pour expliquer!
                        • Partager sur Facebook
                        • Partager sur Twitter
                          3 janvier 2009 à 19:56:39

                          Mais je n'ai pas le droit d'écrire ?

                          while(choixNuggets != 3 && 6 && 9 && 12);
                          


                          En tous cas ça ne marche pas.

                          sisi trés bon je comprends bien ce que tu veux dire ;)
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            3 janvier 2009 à 19:57:07

                            Si, tu as le droit, mais tu n'auras pas le résultat attendu.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              3 janvier 2009 à 19:58:26

                              Je veux bien une explication
                              • Partager sur Facebook
                              • Partager sur Twitter
                                3 janvier 2009 à 20:48:07

                                un petit exemple pour bien comprendre ton problème :
                                #include <stdio.h>
                                #include <stdlib.h>
                                
                                int main(void)
                                {
                                
                                    int choix;
                                    int condition;
                                
                                     printf ("\n Des Mc Nuggets ! Combien en choisissez vous ? 3-6\n");
                                
                                
                                       do
                                      {
                                
                                	   scanf ("%d", &choix);
                                	   printf("\n choix = %d \n",choix);
                                
                                	   condition = (choix!=3) && (choix!=6) ;
                                	   printf ("\n condition = %d \n",condition);
                                
                                
                                      }
                                        while(condition);
                                
                                
                                
                                    return 0;
                                }
                                


                                ----> c'est pareil pour moi l'algèbre de boole je m'embrouille aussi ! En écrivant ta condition de sortie comme je l'ai fait je peux tester le résultat, et corriger au besoin
                                @+
                                • Partager sur Facebook
                                • Partager sur Twitter

                                Probleme de boucle

                                × 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