c#console确保用户输入密码

时间:2017-08-08 13:18:00

标签: c# while-loop console-application

很抱歉,如果问题是noobish,不知道google什么,什么也没发现,我有一个控制台应用程序,从用户那里获取密码,并将其设置在一个文件上。我想确保用户输入密码并不要将其留空(只需按Enter键)。如果他没有输入任何东西 应用程序一次又一次地问他密码,直到他输入somthing

bool isitempty = true;
while (isitempty)
{
    var passwordFile = Console.ReadLine();
    if (passwordFile == "")
    {
        Console.WriteLine("sorry, type again");
    }
    else
    {
        zip.Password = String.Format("{0}", passwordFile);
    }
    isitempty = false;
}

我跑了这个,但它只询问一次,如果用户再次将其留空,它将通过此​​步骤。

2 个答案:

答案 0 :(得分:1)

对代码进行最简单的更改以修复问题,即将isitempty = false;语句移到else块中:

    ....
    else
    {
        zip.Password = String.Format("{0}", passwordFile);
        isitempty = false;
    }
}

“更好”(在我看来)重写将是重构代码,如下所示:

string passwordFile = string.Empty;
while (string.IsNullOrWhiteSpace(passwordFile))
{
    passwordFile = Console.ReadLine();
    if (string.IsNullOrWhiteSpace(passwordFile))
        Console.WriteLine("sorry, type again");
}
zip.Password = passwordFile;

这样:

  • 您没有额外的变量来跟踪,它是您需要跟踪和检查的密码变量
  • 当您的格式只是string.Format时,您不需要{0},只需直接使用参数(只要它是一个字符串)

注意我对您的代码所做的一项更改,我将“必须输入内容”解释为“不允许只有空格”。如果这不正确,并且密码确实只包含空格,则应替换两次出现的

string.IsNullOrWhiteSpace(passwordFile)

用这个:

string.IsNullOrEmpty(passwordFile)

双重说明:如果.NET Framework早于4.0,则必须使用string.IsNullOrEmpty,因为{4.0}首次在.NET 4.0中引入。

答案 1 :(得分:0)

static void Main(string[] args)
{
    string password = null;

    do
    {
        Console.Write("Password: ");
        password = Console.ReadLine();
    }
    while (string.IsNullOrWhiteSpace(password));

    // do something with the password
}