初学者问题:C#简单密码程序的While循环出现无限重复提问故障
问题原因
- C#语法规定,
while、if等流程控制语句后未紧跟花括号{}时,仅会将紧随的第一行代码作为其执行体。错误代码中while (password != "secret")未加花括号,只有Console.WriteLine("Please Input Your Password:");这一行被纳入循环体。 - 初始化时
password被赋值为空字符串,永久满足password != "secret"的循环条件,程序会一直执行循环内的输出语句,永远不会走到后续读取输入、密码校验的逻辑,最终形成死循环。
修复方案
把需要循环执行的逻辑全部用花括号包裹进while循环体即可,修正后的参考代码如下:
var password = ""; while (password != "secret") { Console.WriteLine("Please Input Your Password:"); password = Console.ReadLine() ?? ""; // 加?? ""处理ReadLine返回null的边界情况,避免空引用警告 if (password == "secret") { Console.WriteLine("You have been authenticated"); } else { Console.WriteLine("You have not been authenticated"); } }
优化建议
- 原代码中
else if (password != "secret")属于冗余判断,前面已经校验了密码等于secret的场景,直接替换为else即可。 - 日常编码建议给所有流程控制语句都添加花括号,哪怕执行体只有一行代码,能避免后续新增逻辑时出现同类语法错误。
内容的提问来源于stack exchange,提问作者m4tthewh
相关产品推荐
相关产品推荐

