c#允许用户再次输入直到正确

时间:2013-09-07 09:14:58

标签: c#

我在c#中制作ATM。其功能之一是让用户在他们的账户之间转账。我如何才能使用户输入无效的转帐金额(例如负数),系统会提示用户再次输入金额,直到有效为止?我尝试使用while循环,但只要我输入一个负值行“请输入一个有效的转帐金额”,就一直重复不间断。

Console.WriteLine("How much would you like to transfer?");
                double transferamt = double.Parse(Console.ReadLine());
                if (transferamt < 0)
                {
                    Console.WriteLine("Please enter a valid amount to transfer");

                }              

4 个答案:

答案 0 :(得分:9)

使用double.TryParse。这样可确保在用户输入无效格式时不会引发任何异常。根据解析的成功将其包装在一个循环中。

bool valid = false;
double amount;

while (!valid) 
{
    Console.WriteLine("How much would you like to transfer?");

    valid = double.TryParse(Console.ReadLine(), out amount);
} 

您需要为负值添加其他验证:

bool valid = false;
double amount;

while (!valid) 
{
    Console.WriteLine("How much would you like to transfer?");

    valid = double.TryParse(Console.ReadLine(), out amount)
        && amount > 0;
} 

C#仅处理确定输出所需的表达式部分。因此,在上面的示例中,如果double.TryParse(...)返回false,则不会评估amount > 0,因为false && anything == false

如果值不是有效的double,

double.Parse将抛出异常。如果您的.NET版本中没有double.TryParse,您可以编写自己的版本:

public bool TryParse(string value, out double output)
{
    output = 0;

    try
    {
        double = double.Parse(value);
    }
    catch (Exception ex)
    {
        return false;
    }
}

如果您希望以下尝试使用不同的消息,可以稍微重写一次:

double amount;

Console.WriteLine("How much would you like to transfer?");
bool valid = double.TryParse(Console.ReadLine(), out amount)
    && amount > 0;

while (!valid) 
{        
    Console.WriteLine("Please enter a valid amount to transfer?");
    valid = double.TryParse(Console.ReadLine(), out amount)
        && amount > 0;
} 

这可以重构为:

void Main()
{
    double amount = GetAmount();
}
double GetAmount()
{
    double amount = 0;
    bool valid = TryGetAmount("How much would you like to transfer?", out amount);

    while (!valid) 
    {        
        valid = TryGetAmount("Please enter a valid amount to transfer?", out amount);
    }

    return amount;
}
bool TryGetAmount(string message, out double amount)
{
    Console.WriteLine(message);
    return double.TryParse(Console.ReadLine(), out amount)
        && amount > 0;
}

答案 1 :(得分:1)

您需要使用while循环,但需要再次阅读。

while(transferamt < 0){
    Console.WriteLine("Please enter a valid amount to transfer");
    transferamt = double.Parse(Console.ReadLine());
}

答案 2 :(得分:1)

你正在使用if 一次性条件,如果你想继续重复它,直到条件正确,那么你需要使用循环,例如while

double transferamt = -1;
while (transferamt < 0)
{
    Console.WriteLine("Please enter a valid amount to transfer");
    transferamt = double.Parse(Console.ReadLine());
}  

答案 3 :(得分:-1)

double transferamt=0;
do{
Console.WriteLine("Please enter a valid amount to transfer");
transferamt=double.Parse(Console.ReadLine());

}while(transferamt<0)