如何让用户选择是继续程序还是退出程序(C#)

时间:2017-01-22 20:37:11

标签: c# loops user-controls user-input

我编写了一个相当简单的程序,它显示了一个选项菜单,并根据用户的输入执行计算。我想使程序运行,以便它询问用户是否要继续返回菜单或退出程序。我认为它可能需要某种循环,但我不确定如何实现它。

这是我的代码

using System;

namespace WarmUpCalculations

{
    class Program
    {
        static void Main(string[] args)
        {

            Console.Clear();
            Console.WriteLine("Welcome to the Chemistry Formula Calculator!\n\n\n");

            Console.WriteLine("Press 1 for the Density Calculator");
            Console.WriteLine("Press 2 for the Moles Calculator");
            Console.WriteLine("Press 3 for the Energy of a Wave Calculator");
            Console.WriteLine("Press 4 for the Ideal Gas Law Calculator\n\n");
            Console.WriteLine("Please enter a Number from the Options above");
            string choice = Console.ReadLine();

            switch (choice)
            {
                case "1":
                    DensityCalculator();
                    break;
                case "2":
                    MolesCalculator();
                    break;
                case "3":
                    EnergyOfWaveCalculator();
                    break;
                case "4":
                    IdealGasLawCalculator();
                    break;
            }
        }

        static void DensityCalculator()
        {
            Console.Clear();
            Console.WriteLine("Density Calaculator\n\n");
            Console.WriteLine("Will this be for Grams or Kilograms?");
            Console.WriteLine("Type 'g' for Grams or 'kg' for Kilograms");
            string unitMass = Console.ReadLine();

            Console.WriteLine("Please Enter Your Mass");
            Decimal Mass = Convert.ToDecimal(Console.ReadLine());
            Console.WriteLine("Enter units for Volume");
            string unitVolume = Console.ReadLine();
            Console.WriteLine("Please Enter Your Volume");
            Decimal Volume = Convert.ToDecimal(Console.ReadLine());
            Decimal Density = Mass / Volume;
            Math.Round(Density, 4);
            Console.Clear();
            Console.WriteLine("Moles Calaculator\n\n");
            Console.Write("Your Density is ");
            Console.Write(Density);
            Console.Write(unitMass);
            Console.Write("/");
            Console.WriteLine(unitVolume);
            Console.Write(" \n\n");

        }

        static void MolesCalculator()
        {
            Console.Clear();
            Console.WriteLine("Moles Calaculator\n\n");
            Console.WriteLine("Please enter mass of sample");
            Decimal Mass = Convert.ToDecimal(Console.ReadLine());
            Console.WriteLine("Please Enter Your molar mass");
            Decimal MolarMass = Convert.ToDecimal(Console.ReadLine());
            Decimal Moles = Mass / MolarMass;
            Console.Clear();
            Console.WriteLine("Moles Calaculator\n\n");
            Console.Write("Your sample has ");
            Console.Write(Moles);
            Console.Write(" moles\n\n");

        }

        static void EnergyOfWaveCalculator()
        {
            Console.Clear();
            Console.WriteLine("Energy of Wave Calaculator\n\n");
            Console.WriteLine("Please enter the frequency");
            double Frequency = Convert.ToDouble(Console.ReadLine());
            double PlancksConstant = 6.626e-34;
            double Energy = PlancksConstant * Frequency;
            Console.Clear();
            Console.WriteLine("Energy of Wave Calaculator\n\n");
            Console.Write("The answer is ");
            Console.Write(Energy);
            Console.Write(" \n\n");

        }

        static void IdealGasLawCalculator()
        {
            Console.Clear();
            Console.WriteLine("Ideal Gas Law Calaculator\n\n");
            Console.WriteLine("Would you like to solve the following equation for Pressure or Volume?  Press v for Volume or p for Pressure");
            string Frequency = Console.ReadLine();

            if (Frequency == "v"){
                Console.Clear();
                Console.WriteLine("Ideal Gas Law Calaculator\n\n");
                Console.WriteLine("Please enter the pressure");
                decimal Pressure = Convert.ToDecimal(Console.ReadLine());
                Console.WriteLine("Please enter the the number of moles");
                decimal NumberOfMoles = Convert.ToDecimal(Console.ReadLine());
                Console.WriteLine("Please enter the the temperature in degrees Kelvin");
                decimal TemperatureKelvin = Convert.ToDecimal(Console.ReadLine());
                decimal GasLawConstant = Convert.ToDecimal(8.314);
                decimal IdealGasLaw = NumberOfMoles * GasLawConstant * TemperatureKelvin / Pressure;
                Console.Clear();
                Console.WriteLine("Energy of Wave Calaculator\n\n");
                Console.Write("Your answer is ");
                Console.Write(IdealGasLaw);
                Console.Write(" \n\n");
            }
            else
            {
                Console.Clear();
                Console.WriteLine("Ideal Gas Law Calaculator\n\n");
                Console.WriteLine("Please enter the volume");
                decimal Volume = Convert.ToDecimal(Console.ReadLine());
                Console.WriteLine("Please enter the the number of moles");
                decimal NumberOfMoles = Convert.ToDecimal(Console.ReadLine());
                Console.WriteLine("Please enter the the temperature in degrees Kelvin");
                decimal TemperatureKelvin = Convert.ToDecimal(Console.ReadLine());
                decimal GasLawConstant = Convert.ToDecimal(8.314);
                decimal IdealGasLaw = NumberOfMoles * GasLawConstant * TemperatureKelvin / Volume;
                Console.Clear();
                Console.WriteLine("Energy of Wave Calaculator\n\n");
                Console.Write("Your answer is ");
                Console.Write(IdealGasLaw);
                Console.Write(" \n\n");
            }

        }
    }
}

4 个答案:

答案 0 :(得分:2)

这很简单。你有正确的想法。

bool shouldContinue = true;
while(shouldContinue){
        Console.WriteLine("Press 1 for the Density Calculator");
        Console.WriteLine("Press 2 for the Moles Calculator");
        Console.WriteLine("Press 3 for the Energy of a Wave Calculator");
        Console.WriteLine("Press 4 for the Ideal Gas Law Calculator\n\n");
        Console.WriteLine("Press 5 to exit");
        Console.WriteLine("Please enter a Number from the Options above");
        string choice = Console.ReadLine();

        switch (choice)
        {
            case "1":
                DensityCalculator();
                break;
            case "2":
                MolesCalculator();
                break;
            case "3":
                EnergyOfWaveCalculator();
                break;
            case "4":
                IdealGasLawCalculator();
                break;
            case "5":
            shouldContinue = false;
                break;
        }

}

答案 1 :(得分:2)

您可以使用与计算器选择相同的逻辑,并将所有代码放在循环中。

更改Main中的代码:

char action = 'Y';      //create varible for user choice (continue or not)
while (action == 'Y')   // add loop
{
    Console.Clear();
    Console.WriteLine("Welcome to the Chemistry Formula Calculator!\n\n\n");

    Console.WriteLine("Press 1 for the Density Calculator");
    Console.WriteLine("Press 2 for the Moles Calculator");
    Console.WriteLine("Press 3 for the Energy of a Wave Calculator");
    Console.WriteLine("Press 4 for the Ideal Gas Law Calculator\n\n");
    Console.WriteLine("Please enter a Number from the Options above");
    string choice = Console.ReadLine();

    switch (choice)
    {
        case "1":
            DensityCalculator();
            break;
        case "2":
            MolesCalculator();
            break;
        case "3":
            EnergyOfWaveCalculator();
            break;
        case "4":
            IdealGasLawCalculator();
            break;
    }

    //add these lines
    Console.WriteLine("Do you want to continue!\n\n\n");        
    Console.WriteLine("Press Y to continue");
    Console.WriteLine("Press N to finish");    
    action = Console.ReadKey().KeyChar;
}

或者更好的选择是:

Main中的所有代码放在某个方法(即Start())中,然后放在Main中:

char action = 'Y';
while (action == 'Y')
{
    Start();

    Console.WriteLine("Do you want to continue!\n\n\n");        
    Console.WriteLine("Press Y to continue");
    Console.WriteLine("Press N to finish");    
    action = Console.ReadKey().KeyChar;
}   

答案 2 :(得分:0)

您可以定义新方法Menu

将菜单代码放在那里,然后在需要时调用它。在Main()结束时,您可以使用简单的if case

Console.WriteLine("Type 'exit' to quit");
if(Console.ReadLine() == "exit") 
{

}else 
{
    Menu();
}

答案 3 :(得分:0)

像这样更改代码..主方法中的代码太多了:

static void Main(string[] args)
{
    ChooseCalculationMenu();
}

public void ChooseCalculationMenu()
{
    // Put the code from Main here instead
}

并在每种计算方法的最后:

Console.WriteLine("Press c to continue or q to quit.");
if (Console.Readline() == "q"); 
{}
else 
{
    ChooseCalculationMenu();
}