c# - 测试以确保用户输入是 double 且大于零?

标签 c# parsing while-loop user-input

在 C# 中,我试图让用户输入一个数字。然后我想检查一下

  1. 他们输入了一个可以转换为 double 和的字符串
  2. 他们输入了一个大于零的值

我最初创建的方法是

string inValue;
double outcome;

Console.WriteLine("Enter amount: ");
inValue = Console.ReadLine();
while (double.TryParse(inValue, out outcome) == false)
{
    Console.WriteLine("Initial value must be of the type double");
    Console.WriteLine("\nPlease enter the number again: ");
    inValue = Console.ReadLine();
}
outcome = double.Parse(inValue);
while (outcome < 0)
{
    Console.WriteLine("Initial value must be of at least a value of zero");
    Console.WriteLine("\nPlease enter the number again: ");
    inValue = Console.ReadLine();
    outcome = double.Parse(inValue);
}
return outcome;

问题在于,如果用户输入说“-10”然后输入“f”,则会发生异常。这是因为程序将通过第一次检查(检查 double)是否为 -10 的值,但是当输入“f”时,它会在仅给出第二次测试时抛出异常。

我认为解决方案是创建一个 while 语句,当值无法转换为 double 值或值转换为 double 值且小于零时写入错误语句。我不知道该怎么做是将值转换为 double 值,然后在 while 语句中将其评估为大于零。

最佳答案

您走在正确的轨道上 - 您需要有一个 while 循环来获取输入,然后尝试两次验证。一种方法是创建一个 bool 值来跟踪该值是否有效,然后将其用作循环的条件:

double outcome = 0;
bool valid = false;

while (!valid)
{
    Console.WriteLine("Enter amount: ");
    string inValue = Console.ReadLine();
    if (double.TryParse(inValue, out outcome) == false)
    {
        Console.WriteLine("Initial value must be of the type double");
        Console.WriteLine("\nPlease enter the number again: ");
    }
    else if (outcome < 0)
    {
        Console.WriteLine("Initial value must be of at least a value of zero");
        Console.WriteLine("\nPlease enter the number again: ");
    }
    else
    {
        valid = true;
    }
}
return outcome;

也可以将两个条件都放在 while 语句中,但这种方法可以让您根据失败的条件提供不同的消息。

关于c# - 测试以确保用户输入是 double 且大于零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37501137/

相关文章:

objective-c - 如何使用 NSScanner 解析 Cocoa 中制表符分隔的字符串?

c - 填充数组中缺失的数字

c - 在 Bison 中解析一个 While 循环

c# - 使用 IComparable 进行反向排序

c# - 如何保护接口(interface)实现?

C# Windows 窗体被任务管理器杀死......有没有办法运行关机功能?

python - 如何覆盖以前打印的文本?

c# - Signalr SQL底板导致The wait operation timed out异常

java - Try-Catch block 的多种组合 - Java

javascript - 错误解析 D3 d =""重复两次