我如何在此代码中添加TryParse
,所以如果用户输入字母,它将告诉他“无效,请仅输入数字”。我尝试了几种方法,但是它破坏了我的代码。我已经尝试过for
和while
循环。但是,当我确实使用它时,只用了一个数字,然后将该数字分配给了我的所有数组。
{
const int SIZE = 2;
double[] array = new double[SIZE];
Console.WriteLine("Please Sir Enter 2 numbers");
for (int i = 0; i < SIZE; i++)
{
array[i] = Convert.ToDouble(Console.ReadLine());
}
Console.WriteLine("===============================================");
Console.WriteLine("The Values you've entered are");
Console.WriteLine("{0}{1,8}", "index", "value");
for (int counter = 0; counter< SIZE; counter++)
{
Console.WriteLine("{0,5}{1,8}", counter, array[counter]);
}
Console.WriteLine("===============================================");
Console.ReadLine();
}
答案 0 :(得分:1)
像下面这样在for循环中使用while循环:
for (int i = 0; i < SIZE; i++)
{
string input = Console.ReadLine();
double num = 0;
while(!Double.TryParse(input, out num))
{
Console.WriteLine("Not valid, please enter numbers only");
input = Console.ReadLine();
}
array[i] = num;
}
答案 1 :(得分:0)
为了从用户那里获得经过验证的输入(特别是当期望类型是字符串以外的其他类型时),我发现使用辅助方法真的很有用。
下面的方法采用一个显示给用户的字符串(输入提示),然后继续要求用户输入,直到他们输入有效的数字为止(TryParse
是{{ 1}}条件。
如果要对输入进行其他限制,它还会接受一个可选的函数参数,该参数可用于验证输入。该函数定义为接受while
(用户输入)并返回double
(如果输入有效,则返回bool
)
true
要在代码中使用此代码,您只需执行以下操作:
private static double GetDoubleFromUser(string prompt, Func<double, bool> validator = null)
{
double result;
do
{
Console.Write(prompt);
} while (!double.TryParse(Console.ReadLine(), out result) ||
(validator != null && !validator.Invoke(result)));
return result;
}
输出
但是有时您可能希望进一步限制数量,在这种情况下,您可以将验证方法传递给函数。一种简单的方法是将函数作为lambda表达式传递。例如,以下表达式:Console.WriteLine($"Please sir, enter {SIZE} numbers");
for (int i = 0; i < SIZE; i++)
{
array[i] = GetDoubleFromUser($" Enter number #{i + 1}: ");
}
的意思是“如果i => i > 10
大于i
,则返回比较结果”;换句话说,如果{{1 }},否则返回10
”。
您可以像这样将其传递给我们的true
方法:
i > 10
现在,当输入的数字不是数字或输入的数字不大于10时,该方法将继续循环!
输出