在C#中,我试图让用户输入一个数字。然后我想检查一下
我最初创建的方法是
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”则会发生异常。这是因为程序将超过第一次检查(检查双精度)的值为-10,但是当输入“f”时,它仅在给出第二次测试时抛出异常。
我认为解决方案是创建一个while语句,该语句在无法将值转换为double或将值转换为double且低于零时写入错误语句。我不知道该怎么做是将值转换为double,然后在while语句中将其计算为大于零。
答案 0 :(得分:7)
你走在正确的轨道上 - 你需要有一个while循环来获取输入然后尝试两个验证。一种方法是创建一个布尔值来跟踪值是否有效,然后将其用作循环的条件:
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语句中,但是这种方法可以根据哪些条件失败提供不同的消息。
答案 1 :(得分:6)
你可以在你的第一个while循环中使用这两个条件
类似
while (!double.TryParse(inValue, out outcome) || outcome < 0)
{
...
}
一些解释:double.TryParse如果成功则会修改结果的值,所以如果它能够解析那么! TryParse将被评估为false,因此我们进入第二部分并评估结果&lt; 0
答案 2 :(得分:2)
我会选择这样的解决方案。只需注意在完成double.Parse(Value)
之后您没有double.TryParse(value, out outcome)
out参数将在TryParse为真时填充该变量。
您可以将以下代码复制并粘贴到LinqPad并使用它。但这可以满足您的需求。
void Main()
{
var result = DoWork();
Console.WriteLine(result);
}
public double DoWork()
{
string inValue;
double outcome;
Console.WriteLine("Enter amount: ");
inValue = Console.ReadLine();
while (!double.TryParse(inValue, out outcome) || outcome <= 0)
{
Console.WriteLine("Initial value must be of the type double and greater than 0");
Console.WriteLine("\nPlease enter the number again: ");
inValue = Console.ReadLine();
}
return outcome;
}
答案 3 :(得分:0)
string inValue = "";
double outcome = -1;
Console.WriteLine("Enter amount: ");
while (outcome < 0){
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: ");
continue;
}
if (outcome>=0) {continue;}
Console.WriteLine("Initial value must be of at least a value of zero");
Console.WriteLine("\nPlease enter the number again: ");
}
return outcome;