C#登录验证异常:3次失败后未关闭程序却进入菜单页
登录验证程序问题排查与修复
问题核心
连续3次登录失败后,程序虽提示5秒后关闭,但实际会跳转到Menu页面,未执行关闭操作。
问题原因
当3次登录失败的循环执行完毕后,代码执行了Thread.Sleep(5000),但之后没有终止程序的逻辑,会继续执行AfterLoop标签后的代码,所以会进入Menu页面。
修复方案
在Thread.Sleep(5000)之后添加Environment.Exit(0),强制终止程序,这样睡眠5秒后就会直接关闭,不会走到后续的Menu代码:
Console.WriteLine("U heeft geen poginen meer, de applicatie sluit af na 5 seconden"); Thread.Sleep(5000); Environment.Exit(0); // 添加这行代码退出程序
其他代码优化建议
- 移除无用引用:代码顶部很多
using未被使用(比如System.Configuration、System.IO、System.Net.NetworkInformation等),删除这些冗余引用可以减少编译负担,让代码更整洁。 - 替换goto语句:goto会让代码逻辑可读性变差,建议用布尔变量控制流程:
bool isLoggedIn = false; for (int i = 0; i < 3; i++) { // 输入逻辑... if (inlognaam == gebruikersnaam && password == wachtwoord) { Console.WriteLine("Succes"); Console.WriteLine("Druk een knop in om door tegaan"); Console.ReadLine(); isLoggedIn = true; break; } // 错误提示... } if (isLoggedIn) { Console.Clear(); Console.WriteLine("Menu"); Console.ReadKey(); } else { Console.WriteLine("U heeft geen poginen meer, de applicatie sluit af na 5 seconden"); Thread.Sleep(5000); Environment.Exit(0); } - 隐藏密码输入:当前密码是明文输入,不安全,可改用
Console.ReadKey(true)实现隐藏输入:Console.WriteLine("Voer wachtwoord in:"); StringBuilder wachtwoordBuilder = new StringBuilder(); while (true) { ConsoleKeyInfo key = Console.ReadKey(true); if (key.Key == ConsoleKey.Enter) { Console.WriteLine(); break; } wachtwoordBuilder.Append(key.KeyChar); Console.Write("*"); } string wachtwoord = wachtwoordBuilder.ToString(); - 使用字符串插值:替换传统的字符串拼接,让代码更简洁易读,比如:
Console.WriteLine($"U heeft nog {3 - i} pogingen");
完整优化后代码
using System; using System.Text; using System.Threading; namespace Gimpies { internal class Program { static void Main(string[] args) { string inlognaam = "inkoop"; string password = "Gimpies_Inkoop"; bool isLoggedIn = false; for (int i = 0; i < 3; i++) { Console.WriteLine($"U heeft nog {3 - i} pogingen"); Console.WriteLine("Voer gebruikersnaam in:"); string gebruikersnaam = Console.ReadLine(); Console.WriteLine("Voer wachtwoord in:"); StringBuilder wachtwoordBuilder = new StringBuilder(); while (true) { ConsoleKeyInfo key = Console.ReadKey(true); if (key.Key == ConsoleKey.Enter) { Console.WriteLine(); break; } wachtwoordBuilder.Append(key.KeyChar); Console.Write("*"); } string wachtwoord = wachtwoordBuilder.ToString(); if (inlognaam == gebruikersnaam && password == wachtwoord) { Console.WriteLine("Succes"); Console.WriteLine("Druk een knop in om door te gaan"); Console.ReadLine(); isLoggedIn = true; break; } else { Console.WriteLine("Gebruikersnaam of wachtwoord is onjuist, probeer opnieuw."); } } if (isLoggedIn) { Console.Clear(); Console.WriteLine("Menu"); Console.ReadKey(); } else { Console.WriteLine("U heeft geen pogingen meer, de applicatie sluit af na 5 seconden"); Thread.Sleep(5000); Environment.Exit(0); } } } }
内容的提问来源于stack exchange,提问作者Gijs
相关产品推荐
相关产品推荐

