这是我的代码。它可以工作,并在用户输入数字以外的内容时向用户发送错误。我需要弄清楚的是,如果他们尝试再次输入字符串,如何发送相同的错误。
Console.WriteLine("Type in a number and then press enter:");
try
{
num2 = Convert.ToDouble(Console.ReadLine());
}
catch
{
Console.WriteLine("Please Enter a valid numerical value!");
Console.WriteLine("Please enter a valid number and then press enter:");
num2 = double.Parse(Console.ReadLine());
}
double result;
do
{
Console.Write("Type in a number and then press enter: ");
}
while (!double.TryParse(Console.ReadLine(), out result));
Console.WriteLine($"Thanks! {result}");
您应该使用 double.TryParse
,它返回一个指示解析是否成功的bool
,并将 out
参数设置为转换后的值。然后你可以做这样的事情:
Console.WriteLine("Type in a number and then press enter:");
double userInput;
while (!double.TryParse(Console.ReadLine(), out userInput)
{
Console.WriteLine("Please Enter a valid numerical value!");
Console.WriteLine("Please enter a valid number and then press enter:");
}
// After the above loop, the variable 'userInput' will contain the user's number
这比使用 try/catch
进行输入验证更有意。有关更多阅读,请参阅:为什么说异常对输入验证如此不利?
创建一个布尔verifiedNumber
然后创建一个while
循环
while(!verifiedNumber) {
Console.WriteLine("Type in a number and then press enter:");
try {
num2 = Convert.ToDouble(Console.ReadLine());
verifiedNumber = true;
}
catch {
Console.WriteLine("Please Enter a valid numerical value!");
}
}
作为另一个 althernative,您可以使用for
循环:
double result;
for(; ; )
{
Console.WriteLine("Type in a number and then press enter:");
if(!double.TryParse(Console.ReadLine(), out result)){
Console.WriteLine("Please Enter a valid numerical value!");
Console.WriteLine("Please enter a valid number and then press enter:");
}
else
{
break;
}
}
Console.WriteLine($"Result = {result}");