我刚刚开始了解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 :(得分:1)
在每break
- 语句
case
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:
在所选部分中执行语句列表从第一个语句开始,然后继续执行语句列表,通常直到达到跳转语句,例如break,goto case,return或throw。此时,控制权转移到switch语句之外或转移到另一个case标签。
答案 1 :(得分:0)
试试这个
case 'r':
Console.WriteLine("Please enter your commands");
parameters[0]= Console.ReadLine();
Method1(parameters);
break;