程序读取先前的输入

时间:2013-05-13 12:51:38

标签: c# console-application

我刚刚开始了解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);
    }
}

然而,我遇到了一个我无法弄清楚的问题。当程序第一次进入循环时,它会正确设置参数,但是当循环继续时,它会给我上一次运行的用户输入。我可能正在做一些不对劲的事情,或者控制台的工作方式有点不同。专家可以解决这个问题吗?

2 个答案:

答案 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;