C#控制台程序PIN验证问题:需实现精确匹配而非部分登录
解决PIN精确匹配问题
嘿,问题出在你用的Contains()方法上!这个方法的作用是检查输入的PIN是否是存储PIN的子串,而不是精确匹配。比如说,如果你的pin.txt里存的是1234,那输入12、34甚至1都会被判定为匹配,这就是为什么输入部分内容也能登录的原因。
修复方案
你需要把Contains()替换成精确相等的比较,同时还要注意处理文件内容可能存在的空白字符(比如换行符、空格)——用File.ReadAllText()读取文件时,可能会把文件末尾的换行也读进来,导致匹配失败。
修改后的代码片段如下:
Console.WriteLine("Please insert your credit card by pressing 'Enter'."); Console.ReadKey(); Console.Write("Please enter your 4-digit PIN: "); pin = Console.ReadLine(); // 读取存储的PIN并去除首尾空白(避免换行、空格干扰) string storedPin = File.ReadAllText("C:/Users/ryanj/OneDrive/Documents/Random code/myApp/pin.txt").Trim(); // 使用精确相等比较,Ordinal参数确保无文化差异的严格匹配 bool pinVerif = string.Equals(storedPin, pin, StringComparison.Ordinal); if(pinVerif) { verified(); } else { Console.WriteLine("Sorry your PIN was incorrect, please try again or exit the program."); menu(); }
额外提醒
- 确保你的
pin.txt文件里只存储4位PIN码,不要有任何多余的字符(比如换行、空格),否则即使修改了代码也可能匹配失败。 - 使用
string.Equals()并指定StringComparison.Ordinal是更严谨的做法,它会忽略系统的文化设置,严格按照字符的ASCII值进行比较,避免一些意想不到的匹配问题。
内容的提问来源于stack exchange,提问作者rG_Infini
相关产品推荐
相关产品推荐

