我想允许用户输入用户名。然后应将用户名存储在文件中(如果文件不存在则创建该文件)。但是,如果文件中已存在用户名,则用户应该收到错误。
完成后,用户应该能够输入新的用户名。
我的问题是我不知道如何继续询问用户名?
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);
}
答案 0 :(得分:0)
你只需要另一个循环让他们输入另一个用户名。
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;
}
}
答案 1 :(得分:0)
如果您每次都以这种方式搜索文件,则每个条目都将为O(n)。我认为更好的方法是保留一个包含文件中所有用户名的集合。因此,打开文件时,将文件中的所有用户名添加到HashSet中。然后,您只需调用hashSet.Contains(username)
即可检查O(1)时间内是否存在用户名。
为了不断询问用户,您可以使用while循环。像这样
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...
}