2015-07-06 3 views
2

Я новичок в C# и кодировании в целом, поэтому, пожалуйста, простите меня. Я хочу использовать цикл while по умолчанию моего оператора switch, но я не знаю, как настроить bool для while. Моя цель состоит в том, чтобы иметь петлю меню до тех пор, пока не будет нажата ни 1, ни 2.Использование цикла while в статусе переключения

switch (userChoice1) 
{ 
    case "1": 
     msg = "\n\nYou have chosen the House Salad with Ranch Dressing. \nPress enter to continue."; 
     saladChoice = "House Salad with Ranch Dressing"; 
     break; 

    case "2": 
     msg = "\n\nYou have chosen the Caesar Salad. \nPress enter to continue. "; 
     saladChoice = "Caesar Salad"; 
     break; 

    default: 
     msg = "\n\nYou have chosen an invalid option. You should have selected \n1 for the House Salad \nor \n2 for the Caesar Salad. "; 

     Console.Beep(); 
     while (true) // I don't know if the switch should be in the while loop or here 
     { 
     } 
     break; 
} 
+1

в то время как цикл должен быть вне переключатель – Jake

+2

возможного дубликата [перерыв из цикла в то время, которое содержит переключатель заявление] (http://stackoverflow.com/questions/1987379/break-out-of-a -while-loop-that-contains-a-switch-statement) – Jake

ответ

5

Что-то вроде:

bool valid; 
    do 
    { 
     valid = true; 
     userChoice1 = Console.ReadLine(); 
     switch (userChoice1) 
     { 
      case "1": 
       msg = "\n\nYou have chosen the House Salad with Ranch Dressing. \nPress enter to continue."; 
       saladChoice = "House Salad with Ranch Dressing"; 
       break; 
      case "2": 
       msg = "\n\nYou have chosen the Caesar Salad. \nPress enter to continue. "; 
       saladChoice = "Caesar Salad"; 
       break; 
      default: 
       msg = "\n\nYou have chosen an invalid option. You should have selected \n1 for the House Salad \nor \n2 for the Caesar Salad. "; 
       valid = false; 
       Console.Beep(); 
       break; 
     } 
    } while (!valid); 
+0

Спасибо за помощь, которая сделала это! – NewbMilo

+0

, возможно, узнает, почему сообщение msg не появляется, когда нажато что-либо, кроме 1 или 2? – NewbMilo

+0

NewbMilo - вы никогда не записываете переменную msg на консоль. –

3

Во-первых, никогда не записи while (true) без серьезно зная, что вы делаете. Приложение/thread не будет корректно завершено в таком цикле.

Во-вторых, вы должны цикла вне выключателя на некотором BOOL, что-то вроде:

bool validSelection = false; 
while (!validSelection) 
{ 
    string userSelection = Console.ReadLine(); 
    switch (userSelection) 
    { 
     case "1": 
      validSelection = true; 
      break; 
     default: 
      break; 
    } 
} 
1

Ваш переключатель должен находиться внутри цикла. Переменная, на которую указывает цикл while, должна быть объявлена ​​вне цикла while, и это то, что вы будете манипулировать, чтобы определить, будет ли выполнение проходить через цикл while.

bool proceed = false; 
while(!proceed) 
{ 
    //probably get userChoice1 from console here? 
    switch (userChoice1) 
    { 
     case "1": 
      msg = "\n\nYou have chosen the House Salad with Ranch Dressing. \nPress enter to continue."; 
      saladChoice = "House Salad with Ranch Dressing"; 
      proceed = true; 
      break; 
     case "2": 
      msg = "\n\nYou have chosen the Caesar Salad. \nPress enter to continue. "; 
      saladChoice = "Caesar Salad"; 
      proceeed = true; 
      break; 
     default: 
      msg = "\n\nYou have chosen an invalid option. You should have selected \n1 for the House Salad \nor \n2 for the Caesar Salad. "; 
      Console.Beep();    
      break; 
    } 
} 
+0

Мне что-то не хватает, потому что теперь я получаю бесконечный звуковой сигнал, а не выбор, чтобы повторно выбирать, когда я нажимаю ничего, кроме 1 или 2 – NewbMilo

+0

@NewbMilo См. мой ответ где у меня есть комментарий? Вероятно, нужно что-то вроде 'userChoice1 = Console.ReadLine();' – mason

2

Вам нужно будет иметь время цикла вне выключателя ...

bool validVal = false; 
while (!validVal) 
    { 
    switch (userChoice1) 
     { 
     case "1": 
      msg = "\n\nYou have chosen the House Salad with Ranch Dressing. \nPress enter to continue."; 
      saladChoice = "House Salad with Ranch Dressing"; 
      validVal = true; 
      break; 
     case "2": 
      msg = "\n\nYou have chosen the Caesar Salad. \nPress enter to continue. "; 
      saladChoice = "Caesar Salad"; 
      validVal = true; 
      break; 
     default: 
      msg = "\n\nYou have chosen an invalid option. You should have selected \n1 for the House Salad \nor \n2 for the Caesar Salad. "; 
      Console.Beep(); 
      break; 
     } 
    } 
1

Я не знаю, C#, поэтому, пожалуйста, простите синтаксические ошибки , Вы можете поместить оператор switch в функцию, полностью избавившись от цикла while, и вызывать эту функцию в вашем случае по умолчанию рекурсивно.

public void MenuSwitch() 
{ 
    switch (userChoice1) 
    { 
     case "1": 
      ........... 
      break; 
     case "2": 
      ........... 
      break; 
     default: 
      ........... 
      MenuSwitch(); 
      break; 
    } 
} 
+0

Это имеет мало общего с циклом while. В любом случае, он использует рекурсию, но хороший момент. – Fabjan

+0

Вы правы. Просто указывая на то, что цикл while может быть полностью заменен рекурсией, как вы указали правильно. Я отредактировал свой ответ. – haffla

+0

Благодарим вас за помощь – NewbMilo

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