C#银行系统Switch Statement实现后控制台自动退出问题求助
问题修复方案
问题根源
当前Main函数中的菜单逻辑仅执行1次,switch分支处理完用户输入后无后续执行逻辑,程序就会直接退出。即使你在DisplayBalance方法末尾调用了DisplayMenu(),也仅能打印菜单界面,没有对应逻辑接收用户新输入、再次执行分支处理,程序跑完打印逻辑后还是会结束。同时用递归调用菜单的方式存在栈溢出风险,不推荐使用。
修复步骤
- 在Main函数中新增一层while死循环,将菜单展示、读取用户输入、switch分支处理的逻辑全部包裹进循环内
- 当用户选择选项8时,直接跳出循环结束程序
- 所有非退出的分支执行完成后,统一增加等待用户按回车的逻辑,清屏后再进入下一轮循环展示菜单
- 删掉各个功能方法(如DisplayBalance)中手动调用DisplayMenu()的代码,避免冗余和递归风险
修改后的代码示例
调整后的Main方法
private static void Main(string[] args) { Client client = new Client("Tayla", "Brown", "027493922", "55 Grey Rd"); Everyday everyday = new Everyday(client, Account.GenerateAccountNumber(), 2000m); Investment investment = new Investment(client, 500m); Omni omni = new Omni(client, 1000m); // 死循环包裹整个菜单交互逻辑 while (true) { DisplayMenu(); string userchoice = Console.ReadLine()?.ToUpper() ?? string.Empty; bool isExit = false; switch (userchoice) { case "1": Console.Clear(); Console.WriteLine(client.ClientInfo); break; case "2A": Console.Clear(); DisplayBalance(everyday); break; case "2B": Console.Clear(); DisplayBalance(investment); break; case "2C": Console.Clear(); DisplayBalance(omni); break; case "3A": DepositAmount(everyday); break; case "3B": DepositAmount(investment); break; case "3C": DepositAmount(omni); break; case "4A": WithdrawAmount(everyday); break; case "4B": WithdrawAmount(investment); break; case "4C": WithdrawAmount(omni); break; case "5": DisplayDetails(everyday); break; case "6": DisplayDetails(investment); break; case "7": DisplayDetails(omni); break; case "8": Console.WriteLine("你已选择退出网上银行服务,感谢使用!"); isExit = true; break; default: Console.Clear(); Console.WriteLine("输入选项无效,请重新输入!"); break; } if (isExit) { // 选择退出则跳出循环结束程序 break; } // 所有非退出分支统一等待用户按回车后返回菜单 Console.WriteLine("\n按回车键返回主菜单..."); Console.ReadLine(); Console.Clear(); } }
调整后的DisplayBalance方法
private static void DisplayBalance(Account account) { Console.WriteLine($"{account.AccountType} 余额: {account.Balance:$#,##0.00}"); }
注意事项
- 存款、取款、显示详情等其他功能方法不需要额外加返回菜单的逻辑,统一由主循环处理返回逻辑即可,代码维护更方便
- 新增了空输入、无效输入的处理逻辑,避免用户直接按回车或者输入错误内容导致程序异常
内容的提问来源于stack exchange,提问作者HarryB
相关产品推荐
相关产品推荐

