我正在制作一个控制台应用程序,我会在其中向用户询问电话号码int main_phone
,但如果他键入一个不能转换为 int 的字符串,例如“Caramel”,我想给他一个警告并询问一个号码。
好吧,我认为递归函数会做,但我缺乏这个的逻辑能力。我想出的是以下代码片段:
static int? TryParse(string str)
{
int tmp;
if (int.TryParse(str, out tmp)) {
return tmp;
}
return null;
}//End of TryParse();
static int? verifyParse(string str, string lable)
{
int? testedVar = TryParse(str);
if (testedVar == null)
{
Console.WriteLine("Este campo pode apenas conter dígitos de 0 à 9.");
Console.Write(lable);
verifyParse(Console.ReadLine(), lable);
return null;
}
else
{
return testedVar;
}
}//End of verifyParse();
Console.Write("Phone(main):");
int? main_phone = verifyParse(Console.ReadLine(),"Telefone (Principal):");
问题是如果用户输入“字符串” main_phone 将返回为空,那么它会要求一个介于 0 和 9 之间的数字,但是即使用户传递了一个可转换的字符串,例如“12”,main_phone 仍然会为空。
我该如何解决?
编辑1:
我真正需要的是一个函数,如果可以将字符串转换为 int,它会返回 int,否则它会给我一个错误并要求我输入 0 到 9 之间的内容。我觉得这很难,因为该函数必须是能够返回一个 int 或重新运行它(要求并测试一个有效的输入),但它不能,因为它要么返回 int,要么什么都不返回。
编辑2:
这是我的问题的一些更新:
static int TryParse(string lable)
{
string str = Console.ReadLine();
Regex regex = new Regex(@"\d+");
while (!regex.IsMatch(str))
{
Console.WriteLine("Insira apenas dígitos de 0-9, por favor.");
Console.Write(lable);
str = Console.ReadLine();
}
return Convert.ToInt32(str);
}//End of TryParse();
Console.Write("Telefone (Principal):");
int main_phone = TryParse("Telefone (Principal):");
它工作得非常好,除非我输入“1a”之类的东西。在这种情况下,我会收到此错误:
System.FormatException:输入字符串的格式不正确。 在 System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) 在 System.Number.ParseInt32(String s,NumberStyles 样式,NumberFormatInfo 信息) 在 System.Convert.ToInt32(字符串值) 在 App1.Program.TryParse(字符串标签) 在 App1.Program.Main(String[] args)