C# 将用户输入与外部文件 C# 中的数据进行比较
C# Comparing user input with data from external file C#
抱歉,如果 post 重复,但我找不到像我这样的案例 post 在此处或其他地方编辑。
我正在开发一个 C# 控制台应用程序,它应该保存用户输入然后再次读取它“类似于简单的注册和登录应用程序”。
using System;
using System.IO;
namespace Reader
{
class Program
{
static void Main(string[] args)
{
string filepath = @"C:\myProgramingFiles\password.txt";
StreamReader reader = File.OpenText(filepath);
string line = reader.ReadLine();
Console.WriteLine("Write your username:");
string userInput = Console.ReadLine();
Console.WriteLine("Write your password:");
string password = Console.ReadLine();
Console.WriteLine(userInput);
Console.WriteLine(password);
while(line != null)
{
Console.WriteLine(userInput == line);
Console.WriteLine(password == line);
if (userInput == line)
{
Console.WriteLine("Your username is: " + line);
}
if(password == line)
{
Console.WriteLine("Your password is: " + line);
}
line = reader.ReadLine();
}
reader.Close();
}
}
}
我有从 password.txt 读取数据的代码,一切正常,但是当我执行 if-else 时,它首先检查两个用户输入是否与用户名相同,然后检查再次循环并检查两个用户输入是否与密码相似。抱歉,如果我没说清楚,你可以 运行 这个代码,如果你想模拟 password.txt,然后检查它。
这实际上是合乎逻辑的预期结果,但问题是我不知道我还应该怎么做。你能帮帮我吗?
我试过很多东西都不行,这是我最后一次尝试,所以我知道这不是最好的代码,但它解释了问题
将以下内容放入您的文本文件中:
hello:world
将以下内容放入您的代码中:
static void Main(string[] args)
{
string filepath = @"C:\myProgramingFiles\password.txt";
Console.WriteLine("Write your username:");
string username = Console.ReadLine();
Console.WriteLine("Write your password:");
string password = Console.ReadLine();
var lines = File.ReadAllLines(filepath);
var usrpwd = username + ":" + password;
foreach(line in lines)
{
if(usrpwd == line)
Console.WriteLine("Credentials accepted");
}
}
运行 应用程序并输入 hello
作为用户名和 world
作为密码。从那里开始建造..
关于在文本文件中保存新数据,请查看 File.AppendAllLines 或读入所有行,在内存中添加新数据,然后覆盖整个文件。将数据放在列表中而不是数组中可能最容易安排:
var lines = new List<string>(File.ReadAllLines(...));
然后你可以lines.Add(...)
一对user:password
再写出来
假设您的 password.txt 文件是这样的(看起来是这样):
password.txt
User1
Pass123
User2
Pass456
等等
您的代码编写方式,如果用户输入 User1
作为用户名,输入 Pass123
作为密码,则输出将是:
Your username is: User1
Your password is: Pass123
但是如果同一个用户输入 User1
和 Pass456
输出将是:
Your username is: User1
Your password is: Pass456
这显然是不可取的逻辑。
所以您需要的是使用循环检查匹配的用户名,只有满足该条件时,检查匹配的密码。
否则,如果用户输入 Pass123
作为用户名,输入 Pass456
作为密码,您甚至会得到这样的结果:
Your username is: Pass123
Your password is: Pass456
这可能是因为您没有将密码与用户名相关联。要使它们连接,您可以编写如下代码,假设用户名和密码位于不同的行:
解决方案:
while(line != null)
{
Console.WriteLine(userInput == line);
Console.WriteLine(password == line);
if (userInput == line)
{
// ** CHANGES BEGIN
line = reader.ReadLine(); // get password on next line
if (line == password)
{
Console.WriteLine("Credentials are valid");
}
else
{
Console.WriteLine("Credentials are invalid");
}
break; // no need to continue this loop
}
else {
// Important: skip past password line since the username didnt match
line = reader.ReadLine();
}
// ** CHANGES END
line = reader.ReadLine(); // this is now reading the next username or EOF
}
抱歉,如果 post 重复,但我找不到像我这样的案例 post 在此处或其他地方编辑。
我正在开发一个 C# 控制台应用程序,它应该保存用户输入然后再次读取它“类似于简单的注册和登录应用程序”。
using System;
using System.IO;
namespace Reader
{
class Program
{
static void Main(string[] args)
{
string filepath = @"C:\myProgramingFiles\password.txt";
StreamReader reader = File.OpenText(filepath);
string line = reader.ReadLine();
Console.WriteLine("Write your username:");
string userInput = Console.ReadLine();
Console.WriteLine("Write your password:");
string password = Console.ReadLine();
Console.WriteLine(userInput);
Console.WriteLine(password);
while(line != null)
{
Console.WriteLine(userInput == line);
Console.WriteLine(password == line);
if (userInput == line)
{
Console.WriteLine("Your username is: " + line);
}
if(password == line)
{
Console.WriteLine("Your password is: " + line);
}
line = reader.ReadLine();
}
reader.Close();
}
}
}
我有从 password.txt 读取数据的代码,一切正常,但是当我执行 if-else 时,它首先检查两个用户输入是否与用户名相同,然后检查再次循环并检查两个用户输入是否与密码相似。抱歉,如果我没说清楚,你可以 运行 这个代码,如果你想模拟 password.txt,然后检查它。
这实际上是合乎逻辑的预期结果,但问题是我不知道我还应该怎么做。你能帮帮我吗?
我试过很多东西都不行,这是我最后一次尝试,所以我知道这不是最好的代码,但它解释了问题
将以下内容放入您的文本文件中:
hello:world
将以下内容放入您的代码中:
static void Main(string[] args)
{
string filepath = @"C:\myProgramingFiles\password.txt";
Console.WriteLine("Write your username:");
string username = Console.ReadLine();
Console.WriteLine("Write your password:");
string password = Console.ReadLine();
var lines = File.ReadAllLines(filepath);
var usrpwd = username + ":" + password;
foreach(line in lines)
{
if(usrpwd == line)
Console.WriteLine("Credentials accepted");
}
}
运行 应用程序并输入 hello
作为用户名和 world
作为密码。从那里开始建造..
关于在文本文件中保存新数据,请查看 File.AppendAllLines 或读入所有行,在内存中添加新数据,然后覆盖整个文件。将数据放在列表中而不是数组中可能最容易安排:
var lines = new List<string>(File.ReadAllLines(...));
然后你可以lines.Add(...)
一对user:password
再写出来
假设您的 password.txt 文件是这样的(看起来是这样):
password.txt
User1
Pass123
User2
Pass456
等等
您的代码编写方式,如果用户输入 User1
作为用户名,输入 Pass123
作为密码,则输出将是:
Your username is: User1
Your password is: Pass123
但是如果同一个用户输入 User1
和 Pass456
输出将是:
Your username is: User1
Your password is: Pass456
这显然是不可取的逻辑。
所以您需要的是使用循环检查匹配的用户名,只有满足该条件时,检查匹配的密码。
否则,如果用户输入 Pass123
作为用户名,输入 Pass456
作为密码,您甚至会得到这样的结果:
Your username is: Pass123
Your password is: Pass456
这可能是因为您没有将密码与用户名相关联。要使它们连接,您可以编写如下代码,假设用户名和密码位于不同的行:
解决方案:
while(line != null)
{
Console.WriteLine(userInput == line);
Console.WriteLine(password == line);
if (userInput == line)
{
// ** CHANGES BEGIN
line = reader.ReadLine(); // get password on next line
if (line == password)
{
Console.WriteLine("Credentials are valid");
}
else
{
Console.WriteLine("Credentials are invalid");
}
break; // no need to continue this loop
}
else {
// Important: skip past password line since the username didnt match
line = reader.ReadLine();
}
// ** CHANGES END
line = reader.ReadLine(); // this is now reading the next username or EOF
}