You need to enable JavaScript to run this app. C#控制台开发:switch分支执行完成后如何返回主菜单
优惠活动
大模型
产品
解决方案
定价
更多

C#控制台开发:switch分支执行完成后如何返回主菜单

C#控制台售货机主菜单循环重显实现方法

你之前写完加储值分支操作完没法回到主菜单,本质是原来的主菜单打印代码只在程序启动时执行了一次,没有把菜单和分支逻辑放到持续运行的程序壳里。对新手最友好的实现方式是用基础while循环包裹整套菜单交互逻辑,完全不需要写复杂的跳转代码,分支操作走完循环自动回到开头重新打印菜单。

具体改造步骤

  • 先定义需要持续追踪的全局状态,比如储值余额变量decimal currentCredits = 0.00m;
  • 套一层while (true)作为主程序的运行壳,只有用户选退出选项时才跳出循环
  • 把原来零散的主菜单打印代码全部挪到循环体的最开头,每次循环启动都会自动重新渲染
  • 接用户输入的switch分支逻辑放在菜单打印完成后,每个分支写完对应操作逻辑直接break就行,不需要额外写重打菜单的代码

核心参考代码

// 全局状态变量定义
decimal currentCredits = 0.00m;

// 主循环入口
while (true)
{
    // 主菜单打印块
    Console.WriteLine("-------------------------------");
    Console.WriteLine("");
    Console.WriteLine("  VENDING MACHINIES LTD");
    Console.WriteLine("");
    Console.WriteLine("-------------------------------");
    Console.WriteLine("          Main Menu");
    Console.WriteLine("");
    // 动态显示当前余额,替代原来写死的0.00
    Console.WriteLine($"1 - Add Credits (current credits= {currentCredits:0.00})");
    Console.WriteLine("2 - Select product/s");
    Console.WriteLine("3 - Exit");

    // 获取用户选择
    int select = int.Parse(Console.ReadLine());
    switch (select)
    {
        case 1:
            // 已实现的加储值逻辑
            Console.WriteLine("请输入要存入的金额:");
            currentCredits += decimal.Parse(Console.ReadLine());
            // break后循环自动回到开头重显主菜单,无需额外代码
            break;
        case 2:
            // 后续可扩展选商品的逻辑
            Console.WriteLine("选择商品功能待实现");
            break;
        case 3:
            Console.WriteLine("程序已退出");
            // 直接终止程序跳出循环
            return;
    }
}

更简便的优化路径

  • 把独立的主菜单打印块抽成单独的方法,比如ShowMainMenu(),循环里直接调用方法就行,后续修改菜单样式只需要改这一个方法里的内容,避免重复代码冗余
  • 绝对不要在每个switch分支里重复粘贴一遍主菜单的打印代码,后续修改菜单样式时要挨个查找修改,维护成本极高
  • 输入获取环节换成int.TryParse做校验,避免用户输入非数字内容时直接触发程序崩溃,属于低投入高收益的优化点
  • 不推荐新手用递归调用菜单的方式实现循环返回,随着交互层级增加很容易触发栈溢出问题,基础循环的稳定性更强

内容的提问来源于stack exchange,提问作者johnowen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.09 07:24:03