2010-09-22 2 views
1

Я новичок в C#. У меня есть «меню» в консольном приложении. Теперь, когда я закончу выбор предмета из меню и выполню то, что требуется для этого пункта меню, я хочу, чтобы цикл и снова показывал меню, чтобы пользователь мог выбрать пункт меню diffenrent. У меня есть выход в меню, и я только хочу использовать его для выхода. Я пробовал цикл while, но это не работает. Он закрывает приложение после выбора пункта меню и запускает код выбранных элементов. Что я делаю не так?Зацикливание оператора 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; 
     }   
    } 

Может ли кто-нибудь помочь? Заранее спасибо!

EDIT: Я знаю, что этот «Console.Exit» не работает. Я просто так выразился, чтобы не допустить, что консоль должна выйти из нее. Моя проблема в том, что мне нужно циклически перетаскивать все меню каждый раз после того, как был выбран параметр, и выбранный код опции запущен. Я хочу использовать выход для выхода. Но в этот момент меню не зацикливается, консоль закрывается после того, как выбран только один вариант и этот код кода запущен.

EDIT: Что происходит, когда вы запускаете свою программу, и вы нажимаете 1, а затем Return? Это настоящая проблема, меню, похоже, не зацикливается. После того, как я запустил свою программу и нажав 1, верните код в случае, если 1 работает отлично, но затем консоль просто закрывается. Если я снова запустил консоль и нажму 2, на этот раз код в случае 2 также отлично работает, но затем консоль снова закроется. Я проверил все мои дела, как это, и все они отлично работают.

+3

В чем проблема? (Replace Console.Exit by Environment.Exit()) –

+0

Что касается вашего редактирования: для меня ваш образец цикла, как и следовало ожидать. Что происходит, когда вы запускаете свою программу ('Console.Exit' заменяется на' Environment.Exit'), и вы нажимаете 1, а затем Return? Я подозреваю, что выбранный вами образец несколько отличается от кода, который вы используете (очевидно, это потому, что вышеприведенный образец не компилируется). –

+0

Мне известно, что этот «Console.Exit» не работает. Я просто так выразился, чтобы не допустить, что консоль должна выйти из нее. Я попробовал Environment.Exit(), но, похоже, не работает. – CSharpSuzie

ответ

5

Держите это просто: распорки цикл в цикле до 7 нажимается

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

Ваш образец не компилируется. Вам придется заменить 'Console.Exit' (что является фактической проблемой с образцом). –

+0

Меню не зацикливается, консоль закрывается после выбора только одной опции и запускается код этой опции. Не может быть проблема с оператором break после каждого случая? – CSharpSuzie

+0

@CSharpSuzie: Нет, утверждение 'break' должно быть прекрасным. 'break' всегда выходит из самого внутреннего заключенного цикла или оператора switch, как описано [здесь] (http://msdn.microsoft.com/en-us/library/adbctzc4%28VS.71%29.aspx) –

4

Заменить Console.Exit; с input = 30; или просто использовать return;

Учтите что линия int menuchoice = int.Parse(Console.ReadLine()); выдает ошибку, если пользователь вводит символ. Вы можете использовать int.TryParse ...

0

Очень простой способ сделать следующее. используйте входной счетчик как флаг для выхода во время цикла.

case 7: 
    input =30; 
break; 
2

Ваш пример не компилируется, потому что нет Console.Exit.

Просто замените Console.Exit; break; на инструкцию return;, и ваш образец должен работать должным образом.

0

Это прекрасно работает на моей машине, но, конечно, останавливается после 30 команд, поскольку ваша логика диктует.

Console.Exit дает ошибку копирования на моей машине. Я никогда раньше не использовал Console.Exit.

Не можете ли вы просто вернуть его input = 30;, чтобы разбить вашу петлю?

Смежные вопросы