C#登录注册程序优化:注册仅执行一次,登录失败跳过注册
解决方案:实现单次注册与登录失败重试逻辑
核心改动思路
- 拆分注册与登录流程,让注册仅执行一次(成功后进入登录环节,失败可选择重试或退出)
- 登录失败时直接重新发起登录请求,完全跳过注册流程
- 简化冗余的状态变量与重复代码,提升可读性
修改后的完整代码
using System; using System.Threading; class Program { static void Main() { string registeredName = null; string registeredPassword = null; bool registrationDone = false; // 注册流程:仅执行一次(失败可重试,如需严格单次可改为直接退出) while (!registrationDone) { Console.WriteLine("创建你的账号"); Thread.Sleep(500); Console.WriteLine("请设置登录名: "); registeredName = Console.ReadLine(); Thread.Sleep(1500); Console.Clear(); Console.WriteLine("请设置密码: "); registeredPassword = Console.ReadLine(); Console.Clear(); // 模拟账号创建加载动画 for (int i = 0; i < 2; i++) { Console.WriteLine("Creating Account"); Thread.Sleep(800); Console.Clear(); Console.WriteLine("Creating Account."); Thread.Sleep(800); Console.Clear(); Console.WriteLine("Creating Account.."); Thread.Sleep(800); Console.Clear(); Console.WriteLine("Creating Account..."); Thread.Sleep(800); Console.Clear(); } Random rnd = new Random(); int createResult = rnd.Next(1, 3); if (createResult == 1) { Thread.Sleep(1000); Console.WriteLine("账号创建成功!"); Thread.Sleep(3000); Console.Clear(); registrationDone = true; } else { Console.WriteLine("账号创建失败,请重试"); Thread.Sleep(3000); Console.Clear(); // 若要求注册仅执行一次,替换上面两行为: // Console.WriteLine("账号创建失败,程序退出"); // Thread.Sleep(3000); // Environment.Exit(0); } } // 登录流程:失败直接重试,跳过注册 while (true) { Console.WriteLine("请输入登录名:"); var inputLogin = Console.ReadLine(); Console.Clear(); Console.WriteLine("请输入密码:"); var inputPassword = Console.ReadLine(); Console.Clear(); if (inputLogin == registeredName && inputPassword == registeredPassword) { Console.WriteLine("登录成功,祝你游戏愉快!"); Thread.Sleep(3000); Console.Clear(); // 退出动画 string[] exitMessages = {"Exiting", "Exiting.", "Exiting..", "Exiting..."}; foreach (var msg in exitMessages) { Console.WriteLine(msg); Thread.Sleep(500); Console.Clear(); } Environment.Exit(0); } else { Thread.Sleep(1000); Console.WriteLine("登录名或密码错误,请重新输入"); Thread.Sleep(3000); Console.Clear(); } } } }
关键优化点
- 流程分离:注册与登录逻辑完全拆分,注册仅在程序启动时执行一次,成功后进入持续的登录重试循环
- 状态管理简化:用
registrationDone布尔标记替代原代码中混乱的fail、code1变量,逻辑更清晰 - 冗余代码消除:将重复的加载动画、退出动画用循环/数组简化,减少代码体积
- 需求匹配:登录失败后直接回到登录输入界面,完全跳过注册流程,符合需求
内容的提问来源于stack exchange,提问作者Bartosz Baszyński
相关产品推荐
相关产品推荐

