基于C#控制台应用程序中的用户输入运行功能

时间:2017-03-04 22:49:46

标签: c# console-application

我正在尝试运行一个控制台应用程序,该应用程序允许用户选择他们想在PC上运行的作业类型,并且他们的响应将转换为程序运行的功能。现在它的编写方式将锁定,当用户输入除4之外的任何选项将成功关闭程序时不允许任何其他内容。

        static void Main(string[] args)
        {
            int userInput = 0;

            DisplayMenu();

            do
            {
                if (userInput == 1)
                {
                    QuickClean();
                }
                else if (userInput == 2)
                {
                    DeepClean();
                }
                else if (userInput == 3)
                {
                    SuperClean();
                }
            } while (userInput != 4);              

        }

        static public int DisplayMenu()
        {
            Console.WriteLine("");
            Console.WriteLine();
            Console.WriteLine("1. Quick Clean");
            Console.WriteLine("2. Deep Clean");
            Console.WriteLine("3. Super Clean (admin needed)");
            Console.WriteLine("4. exit");
            var result = Console.ReadLine();
            return Convert.ToInt32(result);
        }

        static void QuickClean()
        {
            Console.WriteLine("quickclean");
            Console.ReadLine();
        }

        static void DeepClean()
        {
            Console.WriteLine("deepclean");
            Console.ReadLine();
        }

        static void SuperClean()
        {
            Console.WriteLine("superclean");
            Console.ReadLine();
        }

2 个答案:

答案 0 :(得分:2)

DisplayMenu方法会返回您的用户选择的内容,但您不会将此返回值分配给 usermenu 本地变量。

正如您现在所写的那样,您只需要输入一次,然后进入循环而不将本地变量 usermenu 设置为用户选择,因此当它到达时间时它仍为零测试退出条件,循环进入无限状态。

您需要将调用移动到循环内的 DisplayMenu 并将返回值分配给 usermenu ,这样您的用户就可以再次看到菜单并输入不同的选项,你可以执行所需的操作。

static void Main(string[] args)
{
    int userInput = 0;
    do
    {
        userInput = DisplayMenu();
        if (userInput == 1)
        {
            QuickClean();
        }
        ....
    } while(userInput != 4)
}

我建议更改DisplayMenu中的代码,并避免使用Convert.ToInt32来解析用户输入。如果用户没有输入数字,Convert.ToInt32将使您的程序崩溃。而是使用Int32.TryParse

    static public int DisplayMenu()
    {
        Console.Clear();
        while(true)
        {
            Console.WriteLine("");
            Console.WriteLine();
            Console.WriteLine("1. Quick Clean");
            Console.WriteLine("2. Deep Clean");
            Console.WriteLine("3. Super Clean (admin needed)");
            Console.WriteLine("4. exit");
            int result;
            if(Int32.TryParse(Console.ReadLine(), out result))
                return result;
            else
                Console.WriteLine("Please enter a number");
        }
     }

答案 1 :(得分:0)

您没有将返回值存储在任何位置。调用userInputDisplayMenu()仍为0,这就是您进入do-while的infite循环的原因。

do{
    int userInput = DisplayMenu();
    [...]
} while (userInput != 4)