简体   繁体   中英

Avoid goto statement in C#

I don't want to use some sort of goto statement, but I want the user to return to the main menu when the default case is executed. How?? I know this is a simple problem, but there must be lots of newbie who come across something very similar.

static void buycoffee()
{
    Double price = 0;
    int x = 0;
    while (x == 0)
    {
        Console.WriteLine("Pick a coffee Size");
        Console.WriteLine("1: Small");
        Console.WriteLine("2: Medium");
        Console.WriteLine("3: Large");
        int Size = int.Parse(Console.ReadLine());
        switch (Size)
        {
            case 1:
                price += 1.20;
                break;
            case 2:
                price += 1.70;
                break;
            case 3:
                price += 2.10;
                break;
            default:
                Console.WriteLine("This option does not exist");
                ///how to return to the main menu here
                break;
        }
        Console.WriteLine("Would you like to buy more coffee?");
        String Response = Console.ReadLine().ToUpper();
        if (Response.StartsWith("Y"))
        {
            Console.Clear();
        }
        else
        {
            x += 1;
        }
    } 
Console.WriteLine("The total bill comes to £{0}", price.ToString("0.00"));
}

}

用以下内容替换您的注释行: continue;

As Nico Schertier said, you can accomplish this with something like the following:

int Size = -1;

while (Size == -1) {
    Console.WriteLine("Pick a coffee Size");
    Console.WriteLine("1: Small");
    Console.WriteLine("2: Medium");
    Console.WriteLine("3: Large");
    Size = int.Parse(Console.ReadLine());
    switch (Size)
    {
        case 1:
            price += 1.20;
            break;
        case 2:
            price += 1.70;
            break;
        case 3:
            price += 2.10;
            break;
        default:
            Size = -1;
            Console.WriteLine("This option does not exist");
            break;
    }
}

Beside @Abion47 and @Dogu Arslan's answers you can also create a function for your menu and also one for your switch.

In this example it will create an infinite loop menu

static void Menu()
{
    Console.WriteLine("Menu");
    Console.WriteLine("1) Take me to My fancy menu");
}
static void SwitchFunc(string input)
{
    switch (input)
    {
        case "1":
            Menu();
            string inputB = Console.ReadLine();
            SwitchFunc(inputB);
            break;
    }
}



static void Main(string[] args)
{
    Menu();
    string input = Console.ReadLine();
    SwitchFunc(input);

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM