返回我的应用程序中的特定代码块

时间:2017-04-12 18:02:57

标签: c# .net visual-studio

我是C#的新手,目前正在构建一个简单的ATM应用程序。我正在尝试编写代码以根据他/她输入的字母M将用户返回到主菜单。中断,继续,转到或返回关键字似乎在我的方案中不起作用;也许我错误地使用了它们。下面的声明是我想跳到的地方。

Console.WriteLine("Select an option? \n VIEW BALANCE (B1) checking, (B2) saving \n DEPOSIT (C1) checking, (C2) saving \n WITHDRAW (W1) checking, (W2) saving");

我想从嵌套在switch语句中的else if语句中的 JUMP (下面)行跳转到上面的代码部分。我怎样才能做到这一点?任何帮助表示赞赏...谢谢!

switch (response)
{
    case "C1": 
        Console.WriteLine("How much would you like to deposit to your checking account?");
        string depositEntry = Console.ReadLine();
        double checkingBalance = Convert.ToInt32(depositEntry) + currentCheckingBalance;
        currentCheckingBalance += checkingBalance;
        Console.WriteLine("Your current checking balance is " + checkingBalance + "\n (X) Exit, (M) Main Menu" );

        string selection = Console.ReadLine().ToUpper();
        if (selection == "X")
        {
            return;
        }
        else if (selection == "M")
        {
            ***JUMP***
        }
        else
        {
            Console.WriteLine("Your entry was invalid");
        }


        break;

    case "C2":      

        break;

    case "W1":

4 个答案:

答案 0 :(得分:1)

使用跳转语句通常表示逻辑流是混乱的。如果有必要,我尽量避免任何跳跃。下面的代码打印出一个主菜单,如果用户键入“x”,程序将退出。如果用户选择其他选项之一,则简单地打印出指示用户选择的消息。用户按任意键后,控制台将清除,主菜单将重新显示。

在主菜单中,如果用户未键入其中一个选项,则忽略该选择,清除控制台,并重新打印菜单。没有显示错误,表示选择无效。

这不需要用户输入“m”返回主菜单。在方法完成后选择存款/取款/ ...后,代码将自动返回主菜单。

我猜这可能就是你要找的东西。希望这可以帮助。

static void Main(string[] args) {

  string userInput = "";
  while ((userInput = GetMainSelection()) != "x") {
    switch (userInput) {
      case "c1":
        Console.WriteLine("C1 Deposit Checking method");
        break;
      case "c2":
        Console.WriteLine("C2 Deposit Savings method");
        break;
      case "b1":
        Console.WriteLine("B1 View Balance Checking method");
        break;
      case "b2":
        Console.WriteLine("B2 View Balance Savings method");
        break;
      case "w1":
        Console.WriteLine("W1 Withdraw Checking method");
        break;
      case "w2":
        Console.WriteLine("W2 withdraw Savings method");
        break;
    }
    Console.WriteLine("Press Any Key to continue"); // <-- show what method was just used
    Console.ReadKey();
    Console.Clear();
  }
  Console.Write("Press any key to exit the program");
  Console.ReadKey();
}

private static string GetMainSelection() {
  string userInput = "";
  while (true) {
    Console.WriteLine("Select an option? \n VIEW BALANCE (B1) checking, (B2) saving \n DEPOSIT (C1) checking, (C2) saving \n WITHDRAW (W1) checking, (W2) saving. (X) to EXit");
    userInput = Console.ReadLine().ToLower();
    if (userInput == "b1" || userInput == "b2" || userInput == "c1" || userInput == "c2" || userInput == "w1" || userInput == "w2" || userInput == "x") {
      return userInput;
    }
    else {
      Console.Clear();
    }
  }
}

答案 1 :(得分:0)

将JUMP代码放入函数中并返回。

public void MainMenu() {
    // Show the main menu
}

public void Response(string response) {
    switch (response)
    {
        case "C1": 
            Console.WriteLine("How much would you like to deposit to your checking account?");
            string depositEntry = Console.ReadLine();
            double checkingBalance = Convert.ToInt32(depositEntry) + currentCheckingBalance;
            currentCheckingBalance += checkingBalance;
            Console.WriteLine("Your current checking balance is " + checkingBalance + "\n (X) Exit, (M) Main Menu" );

            string selection = Console.ReadLine().ToUpper();
            if (selection == "X")
            {
                return;
            }
            else if (selection == "M")
            {
                ***JUMP***
                MainMenu();
                return;
            }
            else
            {
                Console.WriteLine("Your entry was invalid");
            }


            break;

        case "C2":      

            break;

        case "W1":
    }
}

答案 2 :(得分:0)

与已经给出的答案类似,我建议打破这个问题。这是一个例子:

Main方法:

static void Main(string[] args) {
    string input = null;

    do {
        input = Console.ReadLine();
        ParseInput(input);
    } while (input != "X");
}

ParseInput

static void ParseInput(string input) {
    switch (input) {
        case "X": //from Main(), this will close the app
            return;
        case "M":
            MainMenu();
            break;
        case "C1":
            ShowAccount("C1"); //move your deposit/withdraw logic into a method and call with the selected account
            return;
        //other accounts
        default:
            break; //error message?
    }
}

MainMenu

static void MainMenu() {
    Console.WriteLine("Select an option? \n VIEW BALANCE (B1) checking, (B2) saving \n DEPOSIT (C1) checking, (C2) saving \n WITHDRAW (W1) checking, (W2) saving");
}

这应该让你在循环中读取输入,ParseInput函数可以处理你的个案。您可能还想在开始时致电MainMenu(),因此它从头开始显示。

它的工作原理如下:

  1. 获取用户的意见
  2. 将输入传递给ParseInput(),决定下一步该去哪里。
  3. ParseInput()中遇到的任何函数都将执行,写入控制台或要求进一步输入
  4. 该函数返回后,while (input != "X")进行评估。如果input != "X",请转到1,否则退出。

答案 3 :(得分:0)

我建议你使用goto C#reference。

static void Main()
{
    int x = 200, y = 4;
    int count = 0;
    string[,] array = new string[x, y];

    // Initialize the array:
    for (int i = 0; i < x; i++)

        for (int j = 0; j < y; j++)
            array[i, j] = (++count).ToString();

    // Read input:
    Console.Write("Enter the number to search for: ");

    // Input a string:
    string myNumber = Console.ReadLine();

    // Search:
    for (int i = 0; i < x; i++)
    {
        for (int j = 0; j < y; j++)
        {
            if (array[i, j].Equals(myNumber))
            {
                goto Found;
            }
        }
    }

    Console.WriteLine("The number {0} was not found.", myNumber);
    goto Finish;

    Found:
        Console.WriteLine("The number {0} is found.", myNumber);

    Finish:
        Console.WriteLine("End of search.");


    // Keep the console open in debug mode.
    Console.WriteLine("Press any key to exit.");
    Console.ReadKey();
}

输入44的输出为:

  • 输入要搜索的号码:44
  • 找到了44号。
  • 搜索结束。

有关MSDN参考信息,请参阅here