2010-09-22 8 views
1

Je suis nouveau sur C#. J'ai un "menu" dans une application de console. Maintenant, quand j'ai fini de choisir un élément dans le menu et de faire ce que l'élément de menu nécessite, je veux boucler et afficher à nouveau le menu afin que l'utilisateur puisse choisir un élément de menu diffenrent. J'ai une sortie sur le menu et je veux seulement l'utiliser pour sortir. J'ai essayé une boucle while mais cela ne marche pas. Il ferme l'application après la sélection d'un élément de menu et l'exécution du code des éléments choisis. Qu'est-ce que je fais mal?Boucler une instruction switch

static void Main() 
    { 
     int input = 0; 
     while (true) 
     { 

      Console.WriteLine("MENU"); 
      Console.WriteLine("Please enter the number that you want to do:"); 
      Console.WriteLine("1. Do thing A"); 
      Console.WriteLine("2. Do thing B"); 
      Console.WriteLine("3. Do thing C"); 
      Console.WriteLine("4. Do thing D"); 
      Console.WriteLine("5. Do thing E"); 
      Console.WriteLine("6. Do thing F"); 
      Console.WriteLine("7. Exit"); 

      int menuchoice = int.Parse(Console.ReadLine()); 

      switch (menuchoice) 
      { 
       case 1: 
        Console.WriteLine("Thing A has been done"); 
        break; 
       case 2: 
        Console.WriteLine("Thing B has been done"); 
        break; 
       case 3: 
        Console.WriteLine("Thing C has been done"); 
        break; 
       case 4: 
        Console.WriteLine("Thing D has been done"); 
        break; 
       case 5: 
        Console.WriteLine("Thing E has been done"); 
        break; 
       case 6: 
        Console.WriteLine("Thing F has been done"); 
        break; 
       case 7: 
        Environment.Exit; //edit 
        break; 
       default: 
        Console.WriteLine("Sorry, invalid selection"); 
        break; 
      } 

      input++; 
      if (input < 30) 
       continue; 
      else 
       break; 
     }   
    } 

Quelqu'un peut-il s'il vous plaît aider? Merci d'avance!

EDIT: Je suis conscient que cela « Console.Exit » ne fonctionnerait pas. Je l'ai juste mis comme ça à mal que la console doit sortir là. Mon problème est que je dois boucler le menu entier à chaque fois qu'une option a été choisie et que le code d'option choisi a été exécuté. Je veux seulement utiliser la sortie pour sortir. Mais à ce stade, le menu ne boucle pas, la console se ferme après seulement 1 option ont été choisis et que le code d'options a couru.

EDIT: Qu'est-ce qui se passe lorsque vous démarrez votre programme et vous appuyez sur 1 suivi de retour? C'est le vrai problème, le menu ne semble pas être en boucle. Après avoir démarré mon programme et appuyé sur 1 suivi de retour le code dans le cas 1 fonctionne parfaitement mais alors la console se ferme juste. Si je redémarre la console et que j'appuie sur 2 cette fois, le code dans le cas 2 fonctionne aussi parfaitement mais la console se ferme à nouveau. J'ai testé tous mes cas comme ça et tous fonctionnent parfaitement.

+3

Quel est le problème? (Remplacer Console.Exit par Environment.Exit()) –

+0

En ce qui concerne votre édition: Pour moi votre échantillon boucles comme je l'attendrais. Que se passe-t-il lorsque vous lancez votre programme ('Console.Exit' remplacé par' Environment.Exit') et que vous appuyez sur 1 suivi de Return? Je soupçonne que l'échantillon que vous avez posté est quelque peu différent du code que vous utilisez (évidemment, car l'exemple ci-dessus ne compile pas). –

+0

Je suis conscient que "Console.Exit" ne fonctionnerait pas. Je l'ai juste mis comme ça à mal que la console doit sortir là. J'ai essayé Environment.Exit(), mais ne semble pas fonctionner non plus. – CSharpSuzie

Répondre

5

Keep it simple: les séjours en boucle dans la boucle jusqu'à ce que 7 est pressée

int menuchoice = 0; 
     while (menuchoice != 7) 
     { 

      Console.WriteLine("MENU"); 
      Console.WriteLine("Please enter the number that you want to do:"); 
      Console.WriteLine("1. Do thing A"); 
      Console.WriteLine("2. Do thing B"); 
      Console.WriteLine("3. Do thing C"); 
      Console.WriteLine("4. Do thing D"); 
      Console.WriteLine("5. Do thing E"); 
      Console.WriteLine("6. Do thing F"); 
      Console.WriteLine("7. Exit"); 

      menuchoice = int.Parse(Console.ReadLine()); 

      switch (menuchoice) 
      { 
       case 1: 
        Console.WriteLine("Thing A has been done"); 
        break; 
       case 2: 
        Console.WriteLine("Thing B has been done"); 
        break; 
       case 3: 
        Console.WriteLine("Thing C has been done"); 
        break; 
       case 4: 
        Console.WriteLine("Thing D has been done"); 
        break; 
       case 5: 
        Console.WriteLine("Thing E has been done"); 
        break; 
       case 6: 
        Console.WriteLine("Thing F has been done"); 
        break; 
       case 7: 
        break; //edit 
       default: 
        Console.WriteLine("Sorry, invalid selection"); 
        break; 
      } 
+0

Votre échantillon ne compile pas. Vous devrez remplacer 'Console.Exit' (qui est le problème réel avec l'échantillon). –

+0

Le menu ne se boucle pas, la console se ferme après avoir choisi une seule option et exécuté le code d'options. Le problème ne peut-il pas être avec l'instruction break après chaque cas? – CSharpSuzie

+0

@CSharpSuzie: Non, l'instruction 'break' devrait être bonne. 'break' laisse toujours la boucle la plus intérieure ou l'instruction switch comme décrit [ici] (http://msdn.microsoft.com/en-us/library/adbctzc4%28VS.71%29.aspx) –

4

Remplacer Console.Exit; avec input = 30; ou tout simplement utiliser return;

Soyez conscient de la ligne int menuchoice = int.Parse(Console.ReadLine()); produit une erreur si l'utilisateur entre un caractère. Vous pouvez utiliser int.TryParse ...

0

manière très simple est de faire ce qui suit. utiliser le compteur d'entrée comme indicateur pour sortir en boucle.

case 7: 
    input =30; 
break; 
2

Votre exemple de code ne compile pas parce qu'il n'y a pas Console.Exit.

Remplacez simplement Console.Exit; break; par une instruction return; et votre exemple devrait fonctionner comme prévu.

0

Cela fonctionne bien sur ma machine, mais arrête après 30 commandes bien sûr que vos diktats logiques.

Le Console.Exit donne une erreur de Copilation sur ma machine. Je n'ai jamais utilisé Console.Exit auparavant.

Tu ne peux pas repalce avec input = 30; pour briser la boucle?

Questions connexes