C#控制台应用程序计算循环

时间:2014-04-05 13:47:50

标签: c# loops console-application calculator

嗨,这只是一个简单的计算器。在我问他们是否想要进行另一次转换后,我想允许用户输入“N”或“n”。 (输入Y进行另一次转换/输入N返回主菜单)。我该怎么做?

        static int LengthCalculator() {

        int LengthCalculatorOption;
        string AnotherConversion = null;
        double Centimetres = 0.0, Feet = 0.0, Inches = 0.0, TotalInches = 0.0;
        const double CENTIMETRES_PER_INCH = 2.54, INCHES_PER_FOOT = 12;

        do {
            LengthCalculatorMenu();
            LengthCalculatorOption = ValidLengthCalculatorReadOption();

            if (LengthCalculatorOption == 1) {
                Console.WriteLine("Please Enter the Centimetres(cm) that you wish to convert to feet and inches:");
                Centimetres = double.Parse(Console.ReadLine());
                TotalInches = (Centimetres / CENTIMETRES_PER_INCH); // This will take a floor function of Centimetres/2.54
                Feet = (TotalInches - TotalInches % INCHES_PER_FOOT) / INCHES_PER_FOOT; // This will make it divisible by 12
                Inches = TotalInches % INCHES_PER_FOOT; // This will give you the remainder after you divide by 12
                Console.WriteLine("\nThe equivalent in feet and inches is {0} ft {1} ins", Feet, Inches);
                Console.Write("\nWould you like to make an another conversion? \n\n(Enter Y to make an another conversion/Enter any key return to Main menu):");
                AnotherConversion = Console.ReadLine();
            } else if (LengthCalculatorOption == 2) {
                Console.WriteLine("Please Enter the Feet:");
                Feet = double.Parse(Console.ReadLine());
                Console.WriteLine("Please Enter the Inches:");
                Inches = double.Parse(Console.ReadLine());
                Centimetres = ((Feet * INCHES_PER_FOOT) + Inches) * CENTIMETRES_PER_INCH;
                Console.WriteLine("\nThe equivalent in centimetres is {0}cm", Centimetres);
                Console.Write("\nWould you like to make an another conversion? \n\n(Enter Y to make an another conversion/Enter any key return to Main menu):");
                AnotherConversion = Console.ReadLine();
            }
        } while (AnotherConversion == "y" || AnotherConversion == "Y");





        return LengthCalculatorOption;
    }//End LenthCalculator

    static void LengthCalculatorMenu() {
        string LengthCalculatorMenu = ("Enter 1) Convert Centimetres to Feet and Inches:"
                                    + "\nEnter 2) Convert feet and inches to centimetres:");
        Console.WriteLine(LengthCalculatorMenu);
    } // End LengthCalculatorMenu

    static int ValidLengthCalculatorReadOption() {

        int LengthCalculatorOption;
        bool ValidLengthCalculatorOption = false;

        do {
            LengthCalculatorOption = int.Parse(Console.ReadLine());

            if ((LengthCalculatorOption >= 1) && (LengthCalculatorOption <= 2)) {
                ValidLengthCalculatorOption = true;
            } else {
                ValidLengthCalculatorOption = false;
            } // end if

            if (!ValidLengthCalculatorOption) {
                Console.WriteLine("\n\t Option must be 1 or 2, Please Re-Enter your Option");
                LengthCalculatorMenu();
            } //end if 

        } while (!ValidLengthCalculatorOption);

        return LengthCalculatorOption;
    }// End LengthCalculatorReadOption


    static int ReadMainMenuOption() {
        int option = 0;
        bool ValidMainMenuOption = false;

        do {
            option = int.Parse(Console.ReadLine());

            if ((option >= 1) && (option <= 5)) {
                ValidMainMenuOption = true;
            } else {
                ValidMainMenuOption = false;
            } // end if

            if (option == 1) {
                LengthCalculator();
            } else if (option == 2) {

            } else if (option == 3) {

            } else if (option == 4) {

            } else if (option == 5) {

            } // end if 

            if (!ValidMainMenuOption) {
                Console.WriteLine("\n\t\a Option must be 1,2,3,4 or 5");
                DisplayMenu();
            } //end if 
        } while (!ValidMainMenuOption);

        return option;
    } //end ReadOption

    /* Displays Main Menu
     * Precondition:true
     * postcondition: DisplayMenu displayed
     */
    static void DisplayMenu() {
        string mainMenu = "\n1)Length Calculator"
                        + "\n2)Body Mass Index Calculator"
                        + "\n3)Waist to Height Calculator"
                        + "\n4)Fuel Consumption Calculator"
                        + "\n5)Exit the Calculator"
                        + "\n\nEnter your option(1,2,3,4 or 5 to exit):";
        Console.Write(mainMenu);
    } //end DisplayMenu



    static void Main(string[] args) {
        const int Exit = 5;
        int menuOption;
        do {
            DisplayMenu();
            menuOption = ReadMainMenuOption();
        } while (menuOption != Exit);
        Console.Write("Thank you for using this Calculator. Press any Key to Exit");
        //terminating message 
        Console.ReadKey();

    }//end Main

4 个答案:

答案 0 :(得分:1)

您可以创建一个处理用户输入的单独方法。例如,此方法将确定用户是否输入了Y或N.如果他们没有重新提示他们这样做:

static bool AnotherConversion()
{
    var prompt = "\nWould you like to make an another conversion? \n\n(Enter (Y) to make another conversion or (N) to return to the Main Menu):";
    Console.WriteLine(prompt);

    while (true)
    {
        var userInput = Console.ReadLine();

        if (String.Compare("Y", userInput, StringComparison.Ordinal)
        {
            return true;
        }
        else if (String.Compare("N", userInput, StringComparison.Ordinal)
        {
            return false;
        }
        else
        {
            // Invlalid input, re-prompt
            Console.WriteLine("Invalid Input, please enter or (Y) or (N)!");
            Console.WriteLine(prompt);
        }
    }
}

您可以简单地更新do / while循环,以便条件基于AnotherConversion方法。这将允许在计算完成时询问提示:

static int LengthCalculator() {
    ....
    do {
         .....
    } while (AnotherConversion());
    return LengthCalculatorOption;
}//End LenthCalculator

答案 1 :(得分:0)

在您想要的地方调用此方法:

static bool shouldMakeAnotherConversion()
{
    repeatQuestion:
    // This shows the question to the user
    Console.Write("Do you want to make another conversion (Y/N)? ");
    ConsoleKeyInfo answer = Console.ReadKey(true);
    switch (answer.Key)
    {
        case ConsoleKey.Y: return true;
        case ConsoleKey.N: return false;
    }
    //If the user types any other key, the program will repeat the question
    Console.WriteLine();
    goto repeatQuestion;
}

答案 2 :(得分:0)

class Program
{
    public static void parameter(int num1, int num2, out int add, out int sub, out int mul, out float div)
    {
        add = num1 + num2;
        sub = num1 - num2;
        mul = num1 * num2;
        div = (float)num1 / num2;
    }
    static void Main(string[] args)
    {
        int num1, num2;
        int add, sub, mul;
        float div;
        Console.Write("Enter 1st number\t");
        num1 = Convert.ToInt32(Console.ReadLine());
        Console.Write("\nEnter 2nd number\t");
        num2 = Convert.ToInt32(Console.ReadLine());

        Program.parameter(num1, num2, out add, out sub, out mul, out div);
        Console.WriteLine("\n\n{0} + {1} = {2}", num1, num2, add);
        Console.WriteLine("{0} - {1} = {2}", num1, num2, sub);
        Console.WriteLine("{0} * {1} = {2}", num1, num2, mul);
        Console.WriteLine("{0} / {1} = {2}", num1, num2, div);

        Console.ReadLine();
    }
}

}

答案 3 :(得分:0)

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

            Console.WriteLine("Type you first number :");

            Console.WriteLine("Type you second number :");


            Console.WriteLine("Enter the operation + (addition), - (soustraction), * (multiplication), / (division)");
            string stringOperation = Console.ReadLine();


            switch (operation)
            {
                case 1:
                    result = firstNumber + secondNumber;
                    break;

                case 2:
                    result = firstNumber - secondNumber;
                    break;

                case 3:
                    result = firstNumber * secondNumber;
                    break;

                case 4:
                    result = firstNumber / secondNumber;
                    break;

               }

        }
    }
}