2013-05-13 5 views
0

Я только что начал понимать код на C# и хотел попробовать консольное приложение. Достаточно базовый, и для этого потребуется цикл, чтобы выполнить некоторую работу, пока пользователь не решит выйти. Так выглядит моя программа сейчас.Программа читает предыдущий ввод

public void Method1(string[] args) 
{ 
    if (args.Length != 0) 
    { 
     DoWork(args); 
     ResetValues(); 
     Loop(parameter);     
    } 
    else 
    { 
     Console.WriteLine("No arguments passed"); 
     string helpMsg ... 
     Console.WriteLine(helpMsg); 
    } 

public void Loop(parameter) 
{ 
    bool wantsContinue = true; 

    while (wantsContinue) 
    { 
     Console.WriteLine("What would you like to do now?\n-Exit\tWrite 'e'\n-Run again\tWrite 'r'"); 
     ConsoleKeyInfo command = Console.ReadKey(); 
     char key = command.KeyChar; 

     switch (key) 
     { 
      case 'e': 
       return; 
      case 'r': 
       Console.WriteLine("Please enter your commands");       
       string input = Console.ReadLine(); 
       Method1(parameters); 
       break; 
      case 'h': 
       Console.WriteLine(helpMsg); 
       break; 
      default: 
       Console.WriteLine("\nInvalid argument. Enter again"); 
       break; 
     } 
    } 
} 

public void MethodContinuous(input) 
{ 
    Console.WriteLine(input); 
    string[] args = input.Split(' '); 

    if (args.Length != 0) 
    { 
     DoWork(args); 
    } 
    else 
    { 
     Console.WriteLine("No arguments passed"); 
     string helpMsg = ... 
     Console.WriteLine(helpMsg); 
    } 
} 

Однако, у меня возникает проблема, которую я не могу понять. Когда программа входит в цикл в первый раз, она правильно устанавливает параметры, но когда цикл продолжается, он дает мне вход пользователя из предыдущего прогона. Я, вероятно, делаю то, что не так, или Консоль работает по-другому. Может ли эксперт понять это?

+0

Итак, что 'ProgramLoop()'? Что такое 'ResetValues ​​()'? –

+0

изменил его. В основном я настраивал то, что собирался писать заранее, но думал, что у меня есть решение. Изменены имена методов и забыли обновить их. ProgramLoop был переименован в простой цикл. ResetValues ​​просто сбрасывает значения моих переменных и ничего больше. Как вы, очевидно, можете сказать, я довольно новичок! :( –

+0

Хорошо, неважно ... Тем не менее, что происходит в этих методах? И в 'DoWork()' тоже тоже? Как выглядит ваш 'main'? Я считаю, что вы в конечном итоге убьете свой стек ... –

ответ

1

Установите break после каждого case -Statement

switch (key) 
    { 
     case 'e': 
      wantsContinue = false; 
      break; 
     case 'r': 
      Console.WriteLine("\nYippeeee! I get to run again"); 
      Console.WriteLine("Please enter your commands");       
      string input = Console.ReadLine(); 
      Method1(parameters); 
      break; 
     case 'h': 
      Console.WriteLine(helpMsg); 
      break; 
     default: 
      Console.WriteLine("\nInvalid argument. Enter again"); 
      break; 
    } 

От MSDN:

Выполнения списка операторов в выбранной секции начинается с первым оператором и проходит через список операторов, как правило, до тех пор, достигается переход, например, разрыв, goto case, return или throw. В этот момент управление передается за пределы оператора switch или другого ярлыка.

+0

держись, я сделал ошибку. Позвольте мне обновить его. –

+0

обновил его. Я использовал предыдущую версию. –

+0

Также обратите внимание, что в каждом случае вы должны иметь «break» или «return» или выдавать исключение, иначе вы получите ошибку компиляции. –

0

Попробуйте

case 'r': 
      Console.WriteLine("Please enter your commands");       
      parameters[0]= Console.ReadLine(); 
      Method1(parameters); 
      break; 
Смежные вопросы