如何允许用户保留输入的用户名?
How do I allow the user to keep enter usernames?
我想允许用户输入用户名。然后应将用户名存储在一个文件中(如果文件不存在则创建该文件)。但是,如果用户名已存在于文件中,用户应该会收到错误消息。
完成后,用户应该可以输入新的用户名。
我的问题是我不知道如何不断询问用户名?
string fileName = ("Usernames.txt");
if (File.Exists(fileName))
Console.WriteLine("Username file already exists!");
else
Console.WriteLine("Username file was created!");
FileStream un = new FileStream("Usernames.txt",
FileMode.Create, FileAccess.Write);
StreamWriter kasutajanimed = new StreamWriter(un);
Usernames.Close();
Console.WriteLine("Username: ");
string uCreation = Console.ReadLine();
bool exists = false;
foreach (string lines in File.ReadAllLines("Usernames.txt"))
{
if (lines == uCreation)
{
Console.WriteLine("Username already exists!");
exists = true;
break;
}
}
if (!exists)
{
File.AppendAllText(@"Usernames.txt", uCreation + Environment.NewLine);
}
你只需要另一个循环让他们输入另一个用户名。
while(true)
{
Console.WriteLine("Username: ");
string uCreation = Console.ReadLine();
bool exists = false;
foreach (string lines in File.ReadAllLines("Usernames.txt"))
{
if (lines == uCreation)
{
Console.WriteLine("Username already exists!");
exists = true;
break;
}
}
if (!exists)
{
File.AppendAllText(@"Usernames.txt", uCreation + Environment.NewLine);
break;
}
}
如果您每次都以这种方式搜索文件,则每个条目的时间复杂度为 O(n)。我认为更好的方法是在文件中保留一个包含所有用户名的集合。因此在打开文件时将文件中的所有用户名添加到一个 HashSet 中。然后你可以简单地调用 hashSet.Contains(username)
来检查用户名是否在 O(1) 时间内存在。
为了不断询问用户,您可以使用 while true 循环。像这样
while (true) // Loop indefinitely
{
Console.WriteLine("Username: "); // Prompt
string line = Console.ReadLine(); // Get string from user
if (hashSet.Contains(line)) {
Console.WriteLine("Username Already in Use");
continue;
}
if (line == "exit") // have a way to exit, you can do whatever you want
{
break;
}
// Here add to both file and your HashSet...
}
我想允许用户输入用户名。然后应将用户名存储在一个文件中(如果文件不存在则创建该文件)。但是,如果用户名已存在于文件中,用户应该会收到错误消息。
完成后,用户应该可以输入新的用户名。
我的问题是我不知道如何不断询问用户名?
string fileName = ("Usernames.txt");
if (File.Exists(fileName))
Console.WriteLine("Username file already exists!");
else
Console.WriteLine("Username file was created!");
FileStream un = new FileStream("Usernames.txt",
FileMode.Create, FileAccess.Write);
StreamWriter kasutajanimed = new StreamWriter(un);
Usernames.Close();
Console.WriteLine("Username: ");
string uCreation = Console.ReadLine();
bool exists = false;
foreach (string lines in File.ReadAllLines("Usernames.txt"))
{
if (lines == uCreation)
{
Console.WriteLine("Username already exists!");
exists = true;
break;
}
}
if (!exists)
{
File.AppendAllText(@"Usernames.txt", uCreation + Environment.NewLine);
}
你只需要另一个循环让他们输入另一个用户名。
while(true)
{
Console.WriteLine("Username: ");
string uCreation = Console.ReadLine();
bool exists = false;
foreach (string lines in File.ReadAllLines("Usernames.txt"))
{
if (lines == uCreation)
{
Console.WriteLine("Username already exists!");
exists = true;
break;
}
}
if (!exists)
{
File.AppendAllText(@"Usernames.txt", uCreation + Environment.NewLine);
break;
}
}
如果您每次都以这种方式搜索文件,则每个条目的时间复杂度为 O(n)。我认为更好的方法是在文件中保留一个包含所有用户名的集合。因此在打开文件时将文件中的所有用户名添加到一个 HashSet 中。然后你可以简单地调用 hashSet.Contains(username)
来检查用户名是否在 O(1) 时间内存在。
为了不断询问用户,您可以使用 while true 循环。像这样
while (true) // Loop indefinitely
{
Console.WriteLine("Username: "); // Prompt
string line = Console.ReadLine(); // Get string from user
if (hashSet.Contains(line)) {
Console.WriteLine("Username Already in Use");
continue;
}
if (line == "exit") // have a way to exit, you can do whatever you want
{
break;
}
// Here add to both file and your HashSet...
}